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

我有以下代码:

for(var i = 0; i < list.length; i++){

mc_cli.get(list[i], function(err, response) {

do_something(i);

});

}

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

我用这种方式尝试关闭

do_something((function(x){return x})(i))

但是显然,这再次使用了for循环索引的最后一个值。

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

var create_closure = function(i) {

return function() {

return i;

}

}

然后打电话

do_something(create_closure(i)())

但同样没有成功,返回值始终是for循环的最后一个值。

谁能告诉我关闭有错吗?我以为我了解他们,但我不知道为什么这不起作用。

回答:

由于您正在遍历数组,因此可以简单地使用forEach其中提供的列表项和回调中的索引。迭代将具有自己的范围。

list.forEach(function(listItem, index){

mc_cli.get(listItem, function(err, response) {

do_something(index);

});

});

以上是 在JavaScript中的for循环中调用异步函数 的全部内容, 来源链接: utcz.com/qa/419346.html

回到顶部