请考虑以下代码:
var d1=$.Deferred();
var d2=$.Deferred();
d1.resolve();
d2.reject();
var p1=d1.promise();
var p2=d2.promise();
p1.then(function () {
console.log('promiseOne resolved');
return p2;
}).then(function () {
console.log('promiseTwo resolved');
}, function() {
console.log('promiseTwo rejected'); });
我得到了结果:
promiseOne resolved
promiseTwo rejected
我的查询是承诺我们作为第二个.then 方法的调用者对象?更具体;如果我们有:
var x=p1.then(function () {
console.log('promiseOne resolved');
return p2;
})
是x!=p2
,因为 .then 会返回一个新的jQuery.Deferred().promise()
对象。但是,p2以哪种方式影响x? 新承诺x 是否仅获得p2.state()的值?
答案 0 :(得分:1)
是的,then
会返回一个新的承诺(x
),它会解析回调的结果 - 如果该结果(p2
)是一个承诺,它的状态将被采用以便x
履行时p2
履行,p2
拒绝履行时拒绝履行。另请参阅here,也可以阅读Promises/A+ spec。