JavaScript for循环效率比forEach高,还需要forEach吗?
1.5k
类别: 
开发交流
  • 在JavaScript中,forEach循环可以接受一个异步函数作为其回调函数
async function asyncFunc() {
 return new Promise((resolve, reject) => {
   setTimeout(() => {
     resolve('hello');
   }, 1000);
 });
}
async function run() {
 const result = await asyncFunc();
 console.log(result);
}

然而,函数并没有按照我所期望的开始运行,forEach循环并不会等待每个异步操作完成后再进行下一次迭代。这意味着,所有的异步操作都会同时开始,而不是按照顺序一个接一个地执行

  • 如何让异步函数顺序执行呢?使用for of,或 promise 代替
// for of
for (const i of arr) {
    const result = await asyncFunc(i);
    console.log(i); 
}

// promise
await Promise.all(arr.map(async (i) => {
    await asyncFunc();
    console.log(i);
}));

结果顺序执行了,非常完美

那么forEach有什么用呢?

  • 语义清晰 当你看到forEach循环时,你可以立即知道这段代码的目的是遍历数组。而for循环的语义则不那么明确,它可以用于各种不同的情况。
  • forEach 其实是一个迭代器,(Array Set Map)等可迭代对象(iterator Object)身上都会有一个迭代器

如果想要退出forEach怎么办?

由于forEach属于迭代器,只能按序依次遍历完成,所以不支持中断行为。break return continue

  • 可以使用 try catch
try {
    arr.forEach(function (i) {
       if (i == 2) {
           throw new Error();
       }
       console.log(i);
    })
} catch (e) {
    // e
}
标签:
评论 0
/ 1000
0
0
收藏