问题描述:在使用 async-await 的 .map 函数时,在其中加入 sleep 函数的代码,但是在执行过程中发现 sleep 函数并没有按照预期地起作用。
解决方法如下:
使用 Promises 来实现等待:
function sleep(ms) {
return new Promise((resolve) => setTimeout(resolve, ms));
}
async function processData(data) {
await sleep(1000); // 等待1秒钟
// do something with the data
}
async function main() {
const dataArray = [1, 2, 3];
const promises = dataArray.map(async (data) => {
await processData(data); // 等待 processData 函数执行完毕
});
await Promise.all(promises); // 等待所有 promises 执行完毕
console.log('All done');
}
main();
在这里,我们使用了 await
来等待一秒钟后才执行 processData
函数,并使用 Promise.all
来等待所有 promises 执行完毕。这样就可以确保 processData
函数被执行,同时也可以在等待时执行其他操作。
如果需要在中途停止等待,可以使用 Promise.race
来实现。