为什么所有console.logs的输出中的索引值都低于3?我希望:
我假设返回响应的速度不可能足够快,以便在索引为3时成功回调运行。
campaigns = [1, 2, 3, 4];
campaigns.forEach((campaign, index) => {
$.ajax({
type: 'GET',
url: apiURL,
success: function(data) {
console.log('index: ', index);
}
});
});
输出(每次异步时不同):
index: 2
index: 1
index: 3
index: 0
发布于 2018-08-23 03:11:17
index
是一个传递给回调每次迭代的参数-该参数不会单独更改。这不像一个for
循环,每次迭代都可以更改一个共享的i
变量。
如果您想要模拟一个for (var i = 0...
循环,其中i
在结束时被重新分配到3
,那么您需要另一个外部变量,并在每次迭代中显式地重新分配它,例如:
const campaigns = [1, 2, 3, 4];
let campaignIndex = 0;
campaigns.forEach((campaign, index) => {
campaignIndex = index;
$.ajax({
type: 'GET',
url: apiURL,
success: function(data) {
console.log('campaignIndex: ', campaignIndex);
}
});
});
发布于 2018-08-23 03:06:00
因为ajax调用是异步的,forEach是同步的。为了避免这种情况,请使用递归或使用新异步库来控制流。
https://stackoverflow.com/questions/51977712
复制相似问题