首页 > 其他 > 详细

前端闭包 解决异步执行问题

时间:2020-07-26 19:25:23      阅读:123      评论:0      收藏:0      [点我收藏+]

我主要用来解决 请求异步 执行的问题, 不论是ajax请求,还是wx.request,以及其他异步执行的方法

一,问题

由于request是异步执行的原因,请求还没有返回,循环已经执行完;

所以按照下面代码打印 三次结果值都是 索引 2

1 var dataList = [‘aa‘,‘bb‘,‘bb‘]
2 for(var ind in dataList){
3     wx.request({
4         url:‘xxx‘,
5         sucess:function(res){
6             console.log(ind)  // 三次都是2
7         }
8     })
9 }

 

二,解决办法

使用闭包来解决该问题: 通过在内部创建一个自执行函数保存当次循环的索引

var dataList = [‘aa‘,‘bb‘,‘bb‘]
for(var ind in dataList){
    (function(data){
        wx.request({
            url:‘xxx‘,
            sucess:function(res){
                console.log(ind)
            }
        })
    })(ind)
}
// 通过闭包函数参数保存ind

这样就能每次循环时,在请求回调函数中使用档次循环的索引了。

 

或这样写也行,换个形式而已:

var dataList = [‘aa‘,‘bb‘,‘bb‘]
for(var ind in dataList){
    function fn(data){
        wx.request({
            url:‘xxx‘,
            sucess:function(res){
                console.log(ind)
            }
        })
    }
    fn(ind)
}

 

当然也可以直接将循环体封装为一个函数来调用:

var dataList = [‘aa‘,‘bb‘,‘bb‘]
for(var ind in dataList){
    fn(ind)
}
// 通过闭包函数参数保存ind
?
function fn(ind){
    wx.request({
        url:‘xxx‘,
        sucess:function(res){
            console.log(ind)
        }
    })
}

这样每次打印的就是当次循环的索引了

前端闭包 解决异步执行问题

原文:https://www.cnblogs.com/Deaseyy/p/13380439.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!