对如下代码,按我的理解,从上到下执行后,理想中console.log的结果应该是:
预想中的console.log:
当前的m=0
当前的时间是XXX
m=0到达request最内部
m=0到达最内的时间是:XXXX
test(){
for (let m = 0; m < 3; m++) {
console.log('当前的m=',m)
console.log('当前的时间是',Date.now())
wx.request({
url: 'https://api.a.cn',
success:(res1)=>{
wx.request({
url: 'https://api.b.cn',
success:(res2)=>{
console.log('m=',m,'到达request最内部')
console.log('m=',m,'到达最内时间是',Date.now())
}
})
}
})
if(m<2) {
this.sleep(5000)
}
}
},
sleep(delay) {
for (let start = Date.now(); Date.now() - start < delay;);
},
但实际执行下来,发现console.log是这样的:
为什么三次for循环都执行完毕了,才开始执行里面的request?如果想实现预想的功能,又该如何修改呢?
所有异步操作都会等同步操作执行完再执行,js基础,解决方法楼上说了async/await异步转同步~
百度下JS异步问题。
配合async/await解决。