V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
letitbesqzr
V2EX  ›  JavaScript

关于 ajax 循环执行顺序的问题

  •  
  •   letitbesqzr · 2016-07-29 11:52:49 +08:00 · 2560 次点击
    这是一个创建于 3074 天前的主题,其中的信息可能已经有所发展或是发生改变。

    需要遍历一个数组(内容作为参数)执行 ajax.. 需要挨个执行完成以后再执行下一个... 看了下 jquery 的 Deferred 自己试着写了个:
    https://jsfiddle.net/6ayeq7hy/

    但是没达到理想的效果,执行顺序是这样的:

    加载遮罩层
    1 开始执行
    2 开始执行
    3 开始执行
    4 开始执行
    5 开始执行
    6 开始执行
    1 执行完成
    2 执行完成
    3 执行完成
    4 执行完成
    5 执行完成
    6 执行完成
    ajax 全部执行完成,关闭遮罩层
    

    需要达到以下效果:

    加载遮罩层
    1 开始执行
    1 执行完成
    2 开始执行
    2 执行完成
    3 开始执行
    3 执行完成
    4 开始执行
    4 执行完成
    5 开始执行
    5 执行完成
    6 开始执行
    6 执行完成
    ajax 全部执行完成,关闭遮罩层
    
    8 条回复    2016-07-29 12:58:12 +08:00
    yangtukun1412
        1
    yangtukun1412  
       2016-07-29 12:01:39 +08:00   ❤️ 1
    async: false
    letitbesqzr
        2
    letitbesqzr  
    OP
       2016-07-29 12:02:30 +08:00
    @yangtukun1412 除了这个呢... 同步连 gif 图片都会卡死...
    yangtukun1412
        3
    yangtukun1412  
       2016-07-29 12:17:24 +08:00   ❤️ 1
    chairuosen
        4
    chairuosen  
       2016-07-29 12:21:58 +08:00   ❤️ 1
    jarlyyn
        5
    jarlyyn  
       2016-07-29 12:24:34 +08:00   ❤️ 1
    异步问题,一般都找 async.js 搞定呗
    xxxyyy
        6
    xxxyyy  
       2016-07-29 12:26:08 +08:00   ❤️ 1
    http://jsfiddle.net/1807cb0f/
    你需要把每个 deferred 串起来才行,直接 deferred 数组是一个并行操作来的。
    jasonslyvia
        7
    jasonslyvia  
       2016-07-29 12:52:45 +08:00   ❤️ 1
    ```javascript
    [1, 2, 3, 4, 5].reduce((prev, curr) => {
    prev.then($.get(`xxx.json?id=${curr}`); // then 里面还可以添加自己的逻辑
    return prev;
    }, Promise.resolve());
    ```
    xi_lin
        8
    xi_lin  
       2016-07-29 12:58:12 +08:00   ❤️ 1
    你的写法是并发队列
    是应该像 3 楼那样变成串行队列来执行
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1525 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 17:03 · PVG 01:03 · LAX 09:03 · JFK 12:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.