【发布时间】:2018-03-30 05:46:59
【问题描述】:
考虑下面的简单代码代码:
await Promise.all(arrayOfObjects.map(async (obj) => {
return await someAsyncFunctionOnObj(obj);
}));
我的问题是,arrayOfObjects 和 someAsyncFunctionOnObj 在执行时占用了太多内存,因为循环不会等待执行完成,而是调用 someAsyncFunctionOnObj (obj),在每一个上,并等待 全部解决,不需要按顺序,这会导致 OOM 崩溃。 我试过使用递归异步函数,它确实解决了顺序问题,但仍然导致 OOM 崩溃。
我要实现的流程是同步循环,意思是
await someAsyncFunctionOnObj(obj1); // wait for it to finish
await someAsyncFunctionOnObj(obj2); // wait for it to finish
...
对如何正确实施有什么建议吗?
【问题讨论】:
-
首先应该是
return await someAsyncFunctionOnObj(obj);但是如果你使用Promise.all,你真的不需要async/await。或者只是await Promise.all(arrayOfObjects.map(someAsyncFunctionOnObj)); -
@dfsq 是的,我只是在展示基本概念。
-
当你想要链接 Promise.all 时,为什么还要使用它们?
-
@Robert 这正是我的问题,链接它们的最佳方式是什么。
-
您可能想要来自here 的示例,只需将第一个代码示例中的 RSVP 替换为 Promise 即可。它也很好地解释了它
标签: javascript typescript asynchronous