我最近多次遇到某种情况,不知道如何正确解决。假设以下代码:
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(使用前将#替换为@)