bluebird:从上次回调后返回的访问值

问题描述 投票:1回答:1

有没有办法检索从上一个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是同步调用返回intermediate值而不等待承诺解析。

new Promise(r => setTimeout(r, 1000));作为一个任意的例子来解决,以表明p将在检查时处于pending状态。因此,我不能使用.value()(我不想使用它,因为我不想要分辨率值)。

之所以不重要,但是如果您感兴趣的话是为了决定是否取消承诺(作为我正在进行的一个抽象的一部分)。

javascript promise bluebird
1个回答
1
投票

使用Bluebird没有简单的支持方法。原因是没有人问过我们,我们对此时添加功能非常犹豫。

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

Promise.config({ monitoring: true });

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

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

© www.soinside.com 2019 - 2024. All rights reserved.