javascript - 青鸟的 promise ——然后终于

标签 javascript node.js promise bluebird

我在 Bluebird/Promises 中遇到了一些问题。 对于 Promise1,无论是调用 fullfill 还是 reject,一切都正常。然而,当我们在 finally block 中返回 Promise2 时,它仅适用于 reject 和 fullfil,我们在 then 的回调中得到 undefined。

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);
    });

输出:

确定1

未定义

最佳答案

finally block 不改变返回值。

There are special semantics for .finally() in that the final value cannot be modified from the handler.

Bluebird 会等待它,但它不会更改返回值(这是一个固执己见的选择,并与提议的 ECMAScript 标准语义一致——就像某些语言中的 finally 而不同于其他语言)。

关于javascript - 青鸟的 promise ——然后终于,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31111887/

相关文章:

javascript - 从服务器加载 .css 和 .js 文件时出现 GET 错误

node.js - Node.js 中生成的进程立即退出

javascript - 串行 promise 和响应。云代码中的成功

javascript - 在 jQuery 2.1 中解决 promise 之前返回多个 promise 后的回调,但不是 3.1

javascript - 单击单个按钮时根据 ils 值更新文档字段值

javascript - 如何动态创建多个 jquery 数据表?

javascript - 如何处理这种典型的 WebSocket 使用情况?

javascript - "TypeError: User.serializeUser is not a function"与 passport.js

javascript - Node js : Express + ssh2 does NOT reset my data structures when loading web pages

javascript - 我如何找出发生未处理的 promise 拒绝的地方?