javascript - 当 ForEach 循环中的每个异步函数都已处理完毕时返回 Promise 结尾 [Javascript/Typescript]

标签 javascript typescript foreach promise

我有一个 ForEach 循环,在其中调用异步函数。使用计数器,我可以计算出数组中的所有项目何时已被处理,但我想知道的是,当所有项目都已处理完毕后,如何返回已解决的 Promise ?

public doAsyncThingsToArray(array: number[]): Promise<void>
let count: number;
array.forEach((item) => {
    this.doAsynchStuff(item)
})
.then(() => {
    count++;
    if (count == item.length) {
        //Probably something has to be done here
    }
});

我希望能够调用我的函数doAsyncThingsToArray像这样:

    doAsyncThingsToArray(myArray)
    .then(() => {
    //all my array has been processed
    })

谢谢!

编辑:

下面的代码有效

public doAsyncThingsToArray(array: number[]): Promise<void> {

Promise.all(
    array.map((item) => {
        return this.doAsynchStuff(item)
            .then(() => {
                console.log("item processed");
                return Promise.resolve();
            })
    })
)
.then(() => {
  console.log("All item are processed");
  return Promise.resolve();
});

最佳答案

这就是为什么Array#map()Promise.all()存在。当您需要对每个数组项的 Promise 的引用时,请勿使用 Array#forEach() 。 doAsyncThingsToArray() 的主体应如下所示:

return Promise.all(array.map((item) => this.doAsyncStuff(item))

其中 this.doAsyncStuff() 返回一个 promise 。

关于javascript - 当 ForEach 循环中的每个异步函数都已处理完毕时返回 Promise 结尾 [Javascript/Typescript],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45411264/

相关文章:

c# - 我如何从 JS 访问 ViewBag

javascript - 从姊妹文件 Node.JS 导入函数

Scala - 每个循环之间的区别

javascript - Jquery - 仅当项目处于事件状态时才删除类

typescript - 如何将 FabricJs 与 TypeScript 一起使用?

javascript - 生产中的深奥错误 : `Type Error: e is undefined`

TypeScript 定义文件

java - 如何迭代 JavaFX 组合框?

r - 接下来使用Revolution R的foreach软件包?

javascript - JQuery:获取所有输入元素的ID、值