如何正确地从 Promise 返回多个值?

2024-01-20

我最近多次遇到某种情况,不知道如何正确解决。假设以下代码:

somethingAsync()
  .then( afterSomething )
  .then( afterSomethingElse )
  
function afterSomething( amazingData ) {
  return processAsync( amazingData );
}
function afterSomethingElse( processedData ) {
}

现在可能会出现一种情况,我希望能够访问amazingData in afterSomethingElse.

一个明显的解决方案是返回一个数组或散列afterSomething,因为,一个函数只能返回一个值。但我想知道是否有办法afterSomethingElse接受 2 个参数并同样调用它,因为这似乎更容易记录和理解。

我只是想知道这种可能性,因为有Q.spread,它的作用与我想要的类似。


您无法解析具有多个属性的 Promise,就像您无法从函数返回多个值一样。 Promise 在概念上表示随时间变化的值,因此虽然您可以表示复合值,但您不能将多个值放入 Promise 中。

Promise 本质上以单个值解析 - 这是 Q 工作方式的一部分,Promises/A+ 规范如何运作 https://stackoverflow.com/a/22776850/1348195如何抽象 http://dl.acm.org/citation.cfm?id=54016 works.

你能得到的最接近的是使用Q.spread并返回数组或使用 ES6 解构(如果支持)或者您愿意使用像 BabelJS 这样的转译工具。

至于将上下文传递给承诺链,请参阅Bergi 对此有出色的规范 https://stackoverflow.com/questions/28250680/how-do-i-access-previous-promise-results-in-a-then-chain.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何正确地从 Promise 返回多个值? 的相关文章