蓝鸟承诺 - 然后终于

Sup*_*ido 8 javascript node.js promise bluebird

我在Bluebird/Promises中遇到了一些问题.对于Promise1,如果调用fullfill或reject,一切正常.但是当我们在finally块中返回Promise2时,它只适用于reject和fullfil,我们在后面的回调中得到了未定义.

function getPromise1() {
    return new Promise(function(fulfill, reject) {
        fulfill("OK1");
    });
}

function getPromise2() {
    return new Promise(function(fulfill, reject) {
        fulfill("OK2");
    });
}


getPromise1()
    .then(function(c){
        console.log(c);
    })
    .catch(function(e) {
        console.log(e);
    })
    .finally(function() {
        return getPromise2();
    })
    .then(function(c){
        console.log(c);
    })
    .catch(function(e) {
        console.log(e);
    });
Run Code Online (Sandbox Code Playgroud)

输出:

OK1

未定义

Ben*_*aum 8

finally块不会更改返回值.

.finally()有一些特殊的语义,因为无法从处理程序修改最终值.

Bluebird将等待它,但它不会改变返回值(这是一个自以为是的选择并与提议的ECMAScript标准语义一致 - 就像finally在某些语言中一样,与其他语言不同).