什么承诺会回来?

时间:2016-02-09 10:59:21

标签: javascript jquery promise

请考虑以下代码:

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()值?

1 个答案:

答案 0 :(得分:1)

是的,then会返回一个新的承诺(x),它会解析回调的结果 - 如果该结果(p2)是一个承诺,它的状态将被采用以便x履行时p2履行,p2拒绝履行时拒绝履行。另请参阅here,也可以阅读Promises/A+ spec