reject: reject
})
});
}
function handle(deferred) {
var handleFn;
if(state === ‘fulfilled’) {
handleFn = deferred.onFulfilled;
} else if(state === ‘rejected’) {
handleFn = deferred.onRejected;
}
var ret = handleFn(value);
deferred.resolve(ret); //注意,此时的resolve是promise2的resolve
}
function resolve(val) {
if(val && typeof val.then === ‘function’) {
val.then(resolve); // if val为promise对象或类promise对象时,promise2的状态完全由val决定
return;
}
if(callback) { // callback为指定的回调函数
callback(val);
}
}
b)实现了多个不同异步库之间的转换。
在异步中存在一个叫thenable的对象,就是指具有then方法的对象,只要一个对象对象具有then方法,就可以对其进行转换,例如:
var deferred = $(‘aa.ajax’); // !!deferred.then === true
var P = Promise.resolve(deferred);
p.then(……)
1.4.3 commonJS Promise/A规范
目前关于Promise的规范存在Promise/A和Promise/A+规范,这说明关于Promise的实现是挺复杂的。
then(fulfilledHandler, rejectedHandler, progressHandler)
1.4.4 注意事项
一个Promise里面的回调函数是共享value的,在结果处理中value作为参数传递给相应的回调函数,如果value是对象,那就要小心不要轻易修改value的值。
var p = Promise.resolve({x: 1});
p.then(function(val) {
console.log(‘first callback: ‘ + val.x++);
});
p.then(function(val) {
console.log(‘second callback: ‘ + val.x)
})
// first callback: 1
// second callback: 2









