在Promise链中返回多个值的最佳方法是什么

时间:2018-08-16 05:45:21

标签: javascript promise return

我确实意识到,当在.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(
    // ...
)

1 个答案:

答案 0 :(得分:3)

return Promise.all的末尾在承诺和非承诺数组上使用.then,然后您可以在下一个.then中立即解构结果,而无需{{1 }},也不需要await

一旦阵列中的所有async已解析,Promise.all将解析。传递给它的非承诺只会被传递给下一个Promises

传递给的将通过

解决

.then