使用一个参数来承诺.then()

时间:2014-11-17 20:24:58

标签: javascript asynchronous promise q

我无法解释Promises / A +规范的含义......

https://promisesaplus.com/#point-23

如果您有一个承诺并且使用一个参数调用。那么这是否意味着无论成功或失败都会调用单个参数?

我觉得它可以解释这个问题。我想我最关心的是Q.

3 个答案:

答案 0 :(得分:2)

.then()处理程序的第一个参数,无论它是否是唯一参数,始终是已完成的处理程序,仅在履行承诺时才会调用。如果存在或不存在第二个参数,则第一个参数不会被区别对待。

答案 1 :(得分:2)

所以对于不确定的人,我制作了一个可以在节点REPL中运行的测试脚本。明确的答案是,不会因为错误的依恋而无法取得成功。

var Q = require('q');

//call with whether or not the promise will resolve
function aPromise (bool) {
    var def = Q.defer();
    if (!bool) {
        def.reject("oooo0o0o00o0 rejected");
    }
    def.resolve('winner winner chicken dinner');
    return def.promise
}

var whatGonnaBe = aPromise(false)

//The Example
whatGonnaBe
.then(function (response) {
    console.log('1')
    console.log(JSON.stringify(response) + '1');
})
.then(function (response) {
    console.log('2')
    console.log(JSON.stringify(response) + '2');
},
function (response) {
    console.log('3')
    console.log(JSON.stringify(response) + '3');
})

答案 2 :(得分:1)

不,第一个参数始终是“成功”或“已解决”的参数。第二个参数总是失败参数,你可以在将promises链接在一起并且只有一个“fail”参数来处理所有失败时省略它。这段代码只是概念性的:

promise1.then(function() {
    return promise2;
}).then(function() {
    return promise3;
}).then(function() {
    /* everything succeeded, move forward */
}, function() {
    /* catch any failure by any of the promises */
});