javascript - JSHint:循环中的异步函数

标签 javascript jquery asynchronous jshint

我在 for 循环中放置了一个异步回调函数(类似于 $.ajax)。它看起来或多或少像(编辑:更新的代码,请参阅评论):

var i = 0;

for ( ; i < 5; i++ ) {
  (function( index ) {
    $.ajax({
      url: "",
      success: function() {
        console.log( index );
      }
    });
  })( i );
}

它有效,但 JSHint 给了我一个警告,内容如下:

"Don't place functions inside loops"

通常我可以将我的回调函数放在循环之外,并在每次迭代时调用该函数。不幸的是,我需要访问在循环内分配的变量(例如i)。所以我正在寻找一种解决方案来执行如下操作:

var i = 0;

function callback( data ) {
  // I want to have access to "i" (0, 1, 2, 3, 4) and the AJAX "data"
  // in this function. But I only have access to "data", because "i"
  // will always be 5
}

for ( ; i < 5; i++ ) {
  $.ajax({
    url: "",
    success: callback
  });
}

最佳答案

在这种情况下,您可以使用一个函数来返回一个可以访问您需要的数据的函数。

var i = 0;
function callback( i ) {
  return function (data) {
    // I want to have access to "i" (0, 1, 2, 3, 4) and the AJAX "data"
    // in this function.
    console.log(i)
  }
}

for ( ; i < 5; i++ ) {
  $.ajax({
    url: "",
    success: callback(i)
  });
}

但是,使用单个请求提交此数据当然比循环提交更好。

关于javascript - JSHint:循环中的异步函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25575934/

相关文章:

javascript - 在javascript中查找html控件的类型

javascript - 为什么我无法在客户端获取 'sessionid'?

php - mysql 数据到 javascript 对象

javascript - Jquery If 语句 - 切换函数

ruby-on-rails - 异步应用服务器与多个阻塞服务器

javascript - 如何在循环内的js中将数据放入多维数组

javascript - 每次读取数据 block 后等待 - Node JS

javascript - 我怎样才能用jquery中的每个函数对多个数字求和?

node.js - 使用嵌套的 async.forEachSeries 和 async.waterfall 来控制 Lambda Node.js 代码的排序

c# - 当方法返回 void 时,是否与任务相同?