2 回复
var变量异步的经典问题。也是let产生的原因。
var i = 0
for(i = 0; i < 2; i++) {
setTimeout(()=>{
console.log(i)
},0)
}
// 输出 2 2
推荐搜索学习js相关知识:
js执行机制中的同步与异步的概念与区别
js执行栈与任务队列
js事件循环
你在一个循环里调用一个异步方法,当然会这样。
db.xxxxx.then里面是异步调用的,可能调用完的时候,你的循环早跑完了,捕捉进去的i自然是循环结束后的值
建议你要么写成async await
要么
var i = 0
while (i < 2) {
(_i => {
db.xxxxxxxxxxx
.then(res => {
console.log(_i)
})
})(i)
i++
}
或者
var i = 0
while (i < 2) {
let _i = i // 别用var
db.xxxxxxxxxxx
.then(res => {
console.log(_i)
})
i++
}