gpt4 book ai didi

javascript - 如何在 .then() 链中访问之前的 promise 结果?

转载 作者:行者123 更新时间:2023-11-30 22:39:32 24 4
gpt4 key购买 nike

我已将我的代码重组为 promises ,并构建了一个美妙的长扁平 promise 链,由多个.then()回调组成。最后我想返回一些复合值,并且需要访问多个中间 promise 结果。但是,序列中间的分辨率值不在最后一个回调的范围内,我该如何访问它们?

function getExample() {
return promiseA(…).then(function(resultA) {
// Some processing
return promiseB(…);
}).then(function(resultB) {
// More processing
return // How do I gain access to resultA here?
});
}

最佳答案

打破链条

当您需要访问链中的中间值时,您应该将链拆分为您需要的那些单独的部分。与其附加一个回调并以某种方式尝试多次使用其参数,不如将多个回调附加到同一个 promise - 无论您需要结果值是什么。别忘了,promise just represents (proxies) a future value !在线性链中从另一个派生一个 promise 之后,使用您的库提供给您的 promise 组合器来构建结果值。

这将导致非常简单的控制流程、清晰的功能组合以及轻松的模块化。

function getExample() {
var a = promiseA(…);
var b = a.then(function(resultA) {
// some processing
return promiseB(…);
});
return Promise.all([a, b]).then(function([resultA, resultB]) {
// more processing
return // something using both resultA and resultB
});
}

Promise.all 之后的回调中的参数解构仅在 ES6 中可用,在 ES5 中,then 调用将被替换为一个漂亮的辅助方法,它由许多 promise 库(QBluebirdwhen、...)提供:.spread(function(resultA, resultB) { ...

Bluebird 还具有专用的 join function用更简单(更高效)的构造替换 Promise.all+spread 组合:


return Promise.join(a, b, function(resultA, resultB) { … });

关于javascript - 如何在 .then() 链中访问之前的 promise 结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31495162/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com