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

2016-07-29 11:52:49 +08:00
 letitbesqzr

需要遍历一个数组(内容作为参数)执行 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 全部执行完成,关闭遮罩层
2560 次点击
所在节点    JavaScript
8 条回复
yangtukun1412
2016-07-29 12:01:39 +08:00
async: false
letitbesqzr
2016-07-29 12:02:30 +08:00
@yangtukun1412 除了这个呢... 同步连 gif 图片都会卡死...
yangtukun1412
2016-07-29 12:17:24 +08:00
chairuosen
2016-07-29 12:21:58 +08:00
jarlyyn
2016-07-29 12:24:34 +08:00
异步问题,一般都找 async.js 搞定呗
xxxyyy
2016-07-29 12:26:08 +08:00
http://jsfiddle.net/1807cb0f/
你需要把每个 deferred 串起来才行,直接 deferred 数组是一个并行操作来的。
jasonslyvia
2016-07-29 12:52:45 +08:00
```javascript
[1, 2, 3, 4, 5].reduce((prev, curr) => {
prev.then($.get(`xxx.json?id=${curr}`); // then 里面还可以添加自己的逻辑
return prev;
}, Promise.resolve());
```
xi_lin
2016-07-29 12:58:12 +08:00
你的写法是并发队列
是应该像 3 楼那样变成串行队列来执行

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/295733

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX