为什么对于所有console.logs,输出以下的index值都不是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
答案 0 :(得分:1)
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);
}
});
});
答案 1 :(得分:0)
因为,ajax调用是异步的,forEach是同步的。为避免这种情况,请使用递归或使用新异步库来控制流。