forEach和for包含非同步呼叫的區別
阿新 • • 發佈:2020-11-26
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