JSHint:循环中的异步函数

时间:2014-08-29 20:41:22

标签: javascript jquery asynchronous jshint

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

var i = 0;

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

它有效,但JSHint给了我一个警告说:

  

&#34;不要在循环中放置函数&#34;

通常我可以将callback函数放在我的循环之外,并在每次迭代时调用该函数。不幸的是,我需要访问在循环内分配的变量(例如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
  });
}

1 个答案:

答案 0 :(得分:2)

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

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)
  });
}

然而,使用单个请求而不是循环来提​​交此数据当然会更好。

相关问题