1. 程式人生 > 實用技巧 >forEach和for包含非同步呼叫的區別

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