我确实意识到,当在.then()处理程序中返回一个非承诺时,它会立即传递到下一个处理程序,如果返回了一个promise,则将暂停执行该promise以便在解决之前传递给下一个处理程序。
我也知道,诺言只能返回一个值。
那蜜蜂说,我该如何将多个参数从一个.then()处理函数返回到下一个? Esepcailly,如果它是承诺和非承诺的混合。目前,我将所有内容放入自定义对象中,将其返回,然后在随后的then()处理函数中使用async await来实现承诺。
然后使用已解决的承诺值和非承诺值一起进行一些工作。
这很好用,但是我的直觉说这不是应该的方式……也许?
示例:
const current = 'blah';
const previous = 'blubb';
this.doSomeAsyncWork()
.then(
result => {
const nonPromiseValue = new domSomethingSynchronous(current, previous);
// "custom object, mix of promises and non-promises"
return {
nonPromise: nonPromise,
promiseA: ControllerA.asyncOperationA(current, nonPromiseValue.someProperty),
promiseB: ControllerB.asyncOperationB(nonPromiseValue.someOtherProperty),
}
}
)
.then(
async x => {
const nonPromiseValue = x.nonPromiseValue;
const valueA = await x.promiseA;
const valueB = await x.promiseB;
// do something with the results of those three variables
}
)
.catch(
// ...
)
答案 0 :(得分:3)
在return Promise.all
的末尾在承诺和非承诺数组上使用.then
,然后您可以在下一个.then
中立即解构结果,而无需{{1 }},也不需要await
。
一旦阵列中的所有async
已解析,Promise.all
将解析。传递给它的非承诺只会被传递给下一个Promises
。
传递给的将通过
解决
.then