JavaScript 中 For 循环内的异步函数调用
JavaScript 的异步特性可能会在 for 循环中调用异步函数时带来挑战。考虑以下代码:
for(var i = 0; i < list.length; i++){ mc_cli.get(list[i], function(err, response) { do_something(i); }); }
问题在于异步回调函数,该函数可能在 for 循环完成后执行。因此,do_something(i) 将始终引用循环的最终迭代。
尝试使用闭包解决方案
开发人员尝试使用闭包来捕获 i 的值在循环的每次迭代中:
do_something((function(x){return x})(i))
但是,这种方法也会失败,因为函数立即执行,导致相同的问题。
使用 forEach
更有效的解决方案是利用 JavaScript 的 forEach 方法,该方法将数组项及其索引提供给回调函数。由于每个回调都有自己的作用域,因此索引值会被保留。list.forEach(function(listItem, index){ mc_cli.get(listItem, function(err, response) { do_something(index); }); });
以上是如何处理 JavaScript For 循环中的异步函数调用?的详细内容。更多信息请关注PHP中文网其他相关文章!