扫描小程序码分享
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++ }
关注后,可在微信内接收相应的重要提醒。
请使用微信扫描二维码关注 “微信开放社区” 公众号
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++ }