为什么这些诺言无法兑现?

时间:2018-08-18 05:52:36

标签: javascript node.js promise async-await

promise.all中,是否需要等待?还有什么不对吗?

(async => {
    const result = Promise.all(
        await domainContext.get1(id),
        await domainContext.get2(id)
    ).then(r => r);
})();

我希望:

result = [get1_value, get2_value]

我得到了:

'{}'

1 个答案:

答案 0 :(得分:7)

Promise.all期望 array 作为单个参数,而不是其参数中的Promises列表。另外,如果您使用的是Promise.all,请不要在内部使用await,因为这样做会破坏目的,因为这样会将 resolved值数组传递给{ {1}}而不是将其传递给一个 Promise 数组来等待。另外,要定义不带参数的异步函数,您需要在Promise.all之后添加一个空参数列表:

async

您还可以const get1 = () => Promise.resolve('get1'); const get2 = () => Promise.resolve('get2'); (async () => { const result = await Promise.all([ get1(), get2(), ]); console.log(result); })();数组await中的每个项目,如下所示:

result

这可能就是您要尝试执行的操作,但是请注意,这会导致在 serial (而不是并行)中请求每个项目。