使用for循环运行异步功能是一种好习惯吗?

时间:2019-12-10 17:43:43

标签: javascript node.js asynchronous

我有一个使用spawn并调用ffmpeg来修剪文件的函数,该函数返回Promise。我需要将音频文件修剪成多个部分,所以我用for循环进行迭代以启动修剪功能,我只需要在for循环中完成修剪过程(生成修剪的文件)即可(因此我不需要来使用await),但仍然需要确保修整功能没有返回错误。

for (let i = 0; i < myArray.length; i++) {
        trim().catch(console.error); //<--- Trim asynchronously
        linkedList.insertAtEnd(i); 
}

我的问题是异步运行for循环修剪音频的好方法是什么?

编辑:我不希望trim()函数完成以迭代数组中的下一个元素。

编辑:我的问题和this之间的区别是我不希望for循环等待trim()函数才能继续到数组中的下一个元素。 / p>

1 个答案:

答案 0 :(得分:0)

要知道是否存在任何错误,您需要在某个时候进行处理,并且,即使您不想在下一次迭代之前等待每个错误,也需要知道它们何时全部完成循环。

为此,可以将每个promise存储到一个数组中(或使用.map)。然后,您可以在每次Promise.all的调用完成后trim来触发代码。

我添加了trimmyArray的定义,并注释了insertAtEnd的“可运行”示例(尽管插入的链表不依赖于{{ 1}}毫无意义,trim也不从循环本身获取任何变体。

trim