相关疑难解决方法(0)

在JavaScript中的for循环中调用异步函数

我有以下代码:

for(var i = 0; i < list.length; i++){
    mc_cli.get(list[i], function(err, response) {
        do_something(i);
    });
}
Run Code Online (Sandbox Code Playgroud)

mc_cli是与memcached数据库的连接.可以想象,回调函数是异步的,因此可以在for循环结束时执行.此外,以这种方式调用时,do_something(i)它始终使用for循环的最后一个值.

我用这种方式尝试了一个闭包

do_something((function(x){return x})(i)) 
Run Code Online (Sandbox Code Playgroud)

但显然这又是使用for循环索引的最后一个值.

我也尝试在for循环之前声明一个函数,如下所示:

var create_closure = function(i) {
    return function() {
        return i;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后打电话

do_something(create_closure(i)())
Run Code Online (Sandbox Code Playgroud)

但是再次没有成功,返回值始终是for循环的最后一个值.

任何人都可以告诉我,我的闭包装有什么问题吗?我以为我理解了它们,但我无法理解为什么这不起作用.

javascript closures asynchronous for-loop

54
推荐指数
5
解决办法
6万
查看次数

标签 统计

asynchronous ×1

closures ×1

for-loop ×1

javascript ×1