首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >具有意外输出的forEach循环中的Ajax

具有意外输出的forEach循环中的Ajax
EN

Stack Overflow用户
提问于 2018-08-23 02:53:29
回答 2查看 57关注 0票数 2

为什么所有console.logs的输出中的索引值都低于3?我希望:

  1. 在任何请求返回响应之前,forEach循环调用ajax 4次。指数= 3。
  2. 返回一个响应,成功的回调运行,在执行阶段,范围链检查索引,这个索引已经是3。

我假设返回响应的速度不可能足够快,以便在索引为3时成功回调运行。

代码语言:javascript
运行
复制
campaigns = [1, 2, 3, 4];

campaigns.forEach((campaign, index) => {
    $.ajax({
        type: 'GET',
        url: apiURL,
        success: function(data) {
            console.log('index: ', index);
        }
    });
});

输出(每次异步时不同):

代码语言:javascript
运行
复制
index: 2
index: 1
index: 3
index: 0
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-23 03:11:17

index是一个传递给回调每次迭代的参数-该参数不会单独更改。这不像一个for循环,每次迭代都可以更改一个共享的i变量。

如果您想要模拟一个for (var i = 0...循环,其中i在结束时被重新分配到3,那么您需要另一个外部变量,并在每次迭代中显式地重新分配它,例如:

代码语言:javascript
运行
复制
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
EN

Stack Overflow用户

发布于 2018-08-23 03:06:00

因为ajax调用是异步的,forEach是同步的。为了避免这种情况,请使用递归或使用新异步库来控制流。

  1. 新异步(每个瀑布,eachSeries)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51977712

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档