javascript - Javascript - 使用for循环运行异步函数是一个好做法?

76 1

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


for (let i = 0; i < myArray.length; i++) {


 trim().catch(console.error); //<--- Trim asynchronously


 linkedList.insertAtEnd(i); 


}



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

时间: 原作者:

96 1

为此,可以将每个Promise存储到数组(或者使用.map )中,然后,你可以trim时触发代码。

我添加了triminsertAtEnd添加了注释。


function trim() {


 return new Promise((resolve, reject) => {


 setTimeout(() => resolve(), 5)


 });


}



let myArray = [1, 2, 3, 4];


let results = [];


for (let i = 0; i < myArray.length; i++) {


 results.push(trim().then(() => true).catch(() => false))


 console.log(`iteration ${i} finished`);


 //linkedList.insertAtEnd(i); 


}



Promise.all(results).then((r) => {


 console.log(`trim() results: ${r}`);


 if (r.every((x) => x)) {


 console.log('success');


 } else {


 console.log('an error occurred');


 }


});

原作者:
...