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