是否有某种方法可以检索从上次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()
(我不想使用它,因为我不想要分辨率值)。
原因并不重要,但如果您感兴趣的话,是为了决定是否取消承诺(作为我正在进行的一个抽象的一部分)。
答案 0 :(得分: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。