forEach和for包含异步调用的区别

forEach和for包含异步调用的区别

作为for循环的增强版,forEach在遍历数组时书写更简洁、可读性也更强。但是当循环中包含异步操作时可能会遇一些坑。

doAdd(e) {
    if (e.keyCode == 13) {
      if (!this.todolistHasSearch(this.todoList, this.searchDate)) {
        this.todoList.push({
          title: this.searchDate,
          state: 0
        })
      } else {
        alert("事件已经存在")
      }
      this.searchDate = ''
    }
  }
  todolistHasSearch(todolist: any, Search: any) {
    // 异步存在问题
    // todolist.forEach(val => {
    //   if (val.title == Search) {
    //     return true
    //   }
    // });

    for (let i = 0; i < todolist.length; i++) {
      if (todolist[i].title == Search) {
        return true
      }
    }
    return false
  }
结论

for循环中会等异步调用完成后再执行后面的语句

forEach中包含异步调用时会直接执行后面的语句

如果循环中包含了异步调用、并且循环后的同步操作调用了遍历后的结果,应该使用for循环代替forEach

请用今天的努力,让明天没有遗憾。
原文地址:https://www.cnblogs.com/cupid10/p/15617651.html