【发布时间】:2018-12-21 20:32:32
【问题描述】:
我可以这样做吗?
const array = ["foo", "bar", "hello", "etc"];
array.forEach(item => process(item)).then(() => {
//run after forEach is done processing the whole array
});
【问题讨论】:
-
嗨 Jamil,AFAIK,只有当流程返回承诺时,您才能这样做。
-
如果
process(item)正在返回承诺,那么Promise.all可以帮助您。 -
不是原生的,但是 bluebird promises 可以做到这一点:bluebirdjs.com/docs/api/promise.each.html
-
我不太确定你为什么要这样做?
Array.forEach是一种同步方法(即“同步”,而不是“异步”)。运行后它将在任何事情之前完全运行。 promises/.then 的重点是允许异步函数继续运行,而其余代码也继续运行。正如 Prakash Sharma 所说,如果process方法正在返回一个承诺,您需要将每个返回的承诺添加到一个数组中,并使用Promise.all附加一个.then回调,以便它们都完成。跨度> -
如果您告诉我们
process(item)做了什么/返回了什么,它会帮助人们给出好的答案。
标签: javascript asynchronous foreach callback