管理 Promise 链中的中间结果
问题:
创建 Promise 链时,它在最终回调中访问中间承诺结果可能具有挑战性。在下面的示例中,我们如何在promiseB的回调中访问promiseA的结果?
function getExample() { return promiseA(…).then(function(resultA) { // Processing return promiseB(…); }).then(function(resultB) { // How can we access resultA here? }); }
解决方案:打破链条
访问中间结果对于承诺链,最好将其分解为单独的组件。这允许您将多个回调附加到同一个承诺,在需要时访问解析的值。这是代码的改进版本:
function getExample() { var a = promiseA(…); var b = a.then(function(resultA) { // Processing return promiseB(…); }); return Promise.all([a, b]).then(function([resultA, resultB]) { // Processing using both resultA and resultB return …; }); }
此方法利用 Promise.all() 方法创建链中所有 Promise 的数组。然后,我们将另一个 then() 回调链接到 Promise.all() 结果,传递一个接收解析值数组的函数。这使得我们可以在最终回调中轻松访问 resultA 和 resultB。
替代解决方案:
在 ES5 中,可以使用 .spread() 方法来实现类似的功能:
… return Promise.all([a, b]).then(.spread(function(resultA, resultB) { … });
Bluebird 提供了专用的 join() 方法来简化此过程进一步:
… return Promise.join(a, b, function(resultA, resultB) { … });
通过打破链条并使用适当的 Promise 组合器,您可以优雅地访问和操作中间 Promise 结果,确保清晰高效的代码结构。
以上是如何访问 JavaScript Promise 链中的中间 Promise 结果?的详细内容。更多信息请关注PHP中文网其他相关文章!