推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
letitbesqzr

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

  •  
  •   letitbesqzr · Jul 29, 2016 · 2975 views
    This topic created in 3601 days ago, the information mentioned may be changed or developed.

    需要遍历一个数组(内容作为参数)执行 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 replies    2016-07-29 12:58:12 +08:00
    yangtukun1412
        1
    yangtukun1412  
       Jul 29, 2016   ❤️ 1
    async: false
    letitbesqzr
        2
    letitbesqzr  
    OP
       Jul 29, 2016
    @yangtukun1412 除了这个呢... 同步连 gif 图片都会卡死...
    yangtukun1412
        3
    yangtukun1412  
       Jul 29, 2016   ❤️ 1
    chairuosen
        4
    chairuosen  
       Jul 29, 2016   ❤️ 1
    jarlyyn
        5
    jarlyyn  
       Jul 29, 2016   ❤️ 1
    异步问题,一般都找 async.js 搞定呗
    xxxyyy
        6
    xxxyyy  
       Jul 29, 2016   ❤️ 1
    http://jsfiddle.net/1807cb0f/
    你需要把每个 deferred 串起来才行,直接 deferred 数组是一个并行操作来的。
    jasonslyvia
        7
    jasonslyvia  
       Jul 29, 2016   ❤️ 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  
       Jul 29, 2016   ❤️ 1
    你的写法是并发队列
    是应该像 3 楼那样变成串行队列来执行
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5485 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 42ms · UTC 07:46 · PVG 15:46 · LAX 00:46 · JFK 03:46
    ♥ Do have faith in what you're doing.