javascript - bluebird:从最后一次回调返回的访问值

标签 javascript promise bluebird

是否有某种方法可以检索从上一个 then 回调返回的任何内容(或传递给初始 Promise.resolve()/resolve())?

const p = Bluebird.resolve().then(() => {
    // I need to access this by inspecting `p` variable
    return new Promise(r => setTimeout(r, 1000));
});

// or
const p = Bluebird.resolve(
    // I need to access this by inspecting `p` variable
    new Promise(r => setTimeout(r, 1000));
);

// or
const p = new Bluebird( resolve => {
    resolve(
        // I need to access this by inspecting `p` variable
        new Promise(r => setTimeout(r, 1000));
    )
});

通过检查 p 变量,我的意思是我想通过执行以下操作来检索最后一个返回值:

const intermediate = new Promise(r => setTimeout(r, 1000));
const p = Bluebird.resolve().then(() => {
    return intermediate;
});
console.log( p.SOME_PROPERTY_OR_METHOD === intermediate ); // => true

p.SOME_PROPERTY_OR_METHOD 是同步调用返回中间值,无需等待 promise 解析。

new Promise(r => setTimeout(r, 1000)); 作为任意示例来表明 p 将处于 pending 检查时的状态。因此,我不能使用 .value()(无论如何我都不想使用它,因为我不想要分辨率值)。

原因并不重要,但如果您有兴趣,它的目的是决定是否取消 promise (作为我正在处理的一个抽象的一部分)。

最佳答案

对于 Bluebird,没有简单的支持方法可以做到这一点。原因是从来没有人问过我们,我们现在对添加功能非常犹豫。

最接近的是使用监控功能,您可以通过以下方式打开它:

Promise.config({ monitoring: true });

然后在浏览器或 Node 中监听创建事件:

self.addEventListener("promiseChained", function(event) {
  // event.type - "promiseCreated"
  // event.details.promise - promise object that was chained to child promise
  // event.details.child - child promise object
});

参见 the documentation用于使用模式。

关于javascript - bluebird:从最后一次回调返回的访问值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49954558/

相关文章:

javascript - EJS 模板不渲染任何内容

javascript - 为什么 setTimeout 中的 setState 不进行批处理?

javascript - 如何在 Promise 循环后运行回调?

javascript - Sequelize promise 和正常 node.js 回调的问题

javascript - 这段代码中嵌套 Promise 的目的是什么?

javascript - 寻求有关如何将可排序网格合并到 Google 电子表格中的总体指导

javascript - react 无限滚动 - 双滚动条显示 - 我只想要窗口滚动条

javascript - 嵌套的 Promise 被卡住

javascript - 调用停止时 jquery 动画队列 promise 会发生什么

node.js - bluebirdjs promise 包裹在 for 循环中