关于for循环一级作用域是有序的但二级作用域是无序的

发布于 7 年前作者 zenggang3620 次浏览最后编辑 7 年前来自 ask

wechatide://minicode/VYu6vXmR7K1Y 代码片段

3 回复
lina
lina1 楼6 年前

老哥了解一下js的异步原理吧。

用闭包解决这个问题。

clong
clong2 楼6 年前

你是要保证加载的顺序和最初的列表顺序一致吗?

let list = [image1,image2,image3]

let position = 0

let length = list.length

let loop = function(){

    let image = list[position]

    wx.getImageInfo({

        success:(res)=>{

            //doSomething

            if (++position<length){

                loop()

            }

        }

    })

}

yan75
yan753 楼5 年前

wx.getImageInfo()函数是异步的,肯定会导致for循环错位,你要想有序可以使用settimeout实现

var i=0;
var timer=setTimeout(function(){
console.log(i);
var timerThat=this;//定时函数
if(i<9){
wx.getImageInfo({
src:url,
success:function(res){
i++;
console.log(i);
//执行你要的代码块;
timer=setTimeout(timerThat,50);//下一次循环
}
})
}else{
console.log(i);
clearTimeout(timer);
}
 
 
},50)