Promise.alls和等待

时间:2018-04-19 15:28:43

标签: javascript node.js promise async-await es6-promise

在尝试将嵌套的Promise.all转移到await / async时,我遇到了一些不同的问题。

我想我还没有得到如何使用Promise.all并等待。

我想做类似下面的事情 - 遍历数组,对其执行操作,结果保存到varibale - 准备在下一个Promise.all上使用。

doThing()doAThing()都是异步函数。

const foo = await Promise.all(arr.map(p => doAThing(p)));
const bar = await Promise.all(foo.map(p => doAnotherThing(p)));

我得到了很多未定义的内容,而且在继续之前,它绝对不会等待结果填充。

我真的只是想避免嵌套的诺言。

谢谢, 奥利

1 个答案:

答案 0 :(得分:1)

如果doAThing()返回一个在其中完成所有异步操作时解析为值的promise,那么foo将是这些已解析值的数组。

如果您在undefined数组中获得foo个值,那么您要么从doAThing()返回任何内容,要么返回一个解析为undefined的承诺。

如果await没有等待所有异步操作完成,那么您要么根本不从doAThing()返回承诺,要么在所有异步操作之前该承诺得到解决完成。为了使所有这一切正常工作,doAThing()必须返回一个仅在您想要等待的所有异步操作都已完成时才解决的承诺。承诺没有提供任何魔力。它们必须正确连接以解决相应的异步操作何时完成。如果在doAThing()中有多个异步操作,则必须将它们全部一起监视,以便该函数在完成所有操作后返回单个promise(链接或自己使用Promise.all())。

为了让我们更具体地帮助您,您必须向我们展示doAThing()的代码。然后,我们可以准确地向您展示代码需要修复的位置。