基于原生js实现Promise
https://promisesaplus.com
(function(){
/*
function resolvePromise(promiseNew, x, resolve, reject){
if(x === promiseNew) throw new TypeError("Chaining cycle detected for promise #<Promise>");
if(x instanceof Promise){//必须保证返回值是我们自己构建的Promise的实例
x.then(resolve, reject);
}else{
//返回结果不是promise实例
resolve(x);
}
}
*/
//验证否是promise实例
var isPromise = function isPromise(obj){
if((obj !== null && typeof obj === 'object') || typeof obj === 'function'){
if(typeof obj.then === 'function'){
return true;
}
}
return false;
}
var resolvePromise = function resolvePromise(promiseNew, x, resolve, reject){
if(x === promiseNew) throw new TypeError("Chaining cycle detected for promise #<Promise>");
if(isPromise(x)){
try{
x.then(resolve, reject);
}catch(err){
reject(err);
}
return;
}
resolve(x);
/*
if((x !== null && typeof x === 'object') || typeof x === 'function'){
try{
var then = x.then;
if(typeof then === 'function'){
//x.then(resolve, reject);
then.call(x, resolve, reject)
}else{
resolve(x);
}
}catch(err){
reject(err);
}
return;
}
//返回结果不是promise实例
resolve(x);
*/
}
function Promise(executor){
//要求传递的executor必须是一个函数
if(typeof executor !== "function") throw new TypeError("Promise resolver "+executor+" is not a function");
var self = this;//当前Promise实例
//初始化状态和结果
self.state = 'pending';
self.result = undefined;
self<