gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 02:58:40 25 4
gpt4 key购买 nike

我有以下代码:

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 - 在 JavaScript 的 for 循环中调用异步函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13343340/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com