-
眼眸繁星
Promise.all可以保证顺序但是得等到所有请求完毕才会触发function p1(time) { return new Promise(function (resolve, reject) { setTimeout(function () { resolve(time); }, time); })}Promise.all([p1(5000), p1(1000)]).then(function (res) { console.log(res);//[5000,1000]});
-
郎朗坤
在请求的时候带过去要显示的li的顺序;然后响应回来顺序;按顺序排列吧
-
30秒到达战场
一,可以把请求回来的数据做一个标识,然后把所有数据 都放到一个数组中,按标识 排序。二,使用Promise.all,接收的是一个数组,等到数组中的请求全部完成,就执行Promise.all().then(values => {}),其中values就是一个数组,且排好序的
-
摇曳的蔷薇
万无一失的方法是:从第一个开始执行,等第一个执行结束后,再执行第二个,依次类推。这种同步方法效率太低。那么可以考虑Promise.all呢?担心promise.all中的所有task都是异步执行的?那么真正返回结果是依task列表顺序返回,所以就它了。
-
jeck猫
以下代码实现了:并发请求顺序操作不需要等待全部请求完毕可以直接运行(()=>{ Promise.allInOrder = (promises, thenForEach)=>{ let sequence = Promise.resolve(); promises.forEach(function(request){ sequence = sequence.then(function(){ return request.then(thenForEach); }); }); };})();// test(()=>{ let timeConsumingFunc = param=>new Promise( (resolve)=>{ let timeout = Math.random() * 5000; console.log(`task ${param} will be resolved in ${timeout}ms`); setTimeout(()=>{ console.log(`${param} resolved`); resolve(param+10); }, timeout); } ); Promise .allInOrder( [timeConsumingFunc(1), timeConsumingFunc(2), timeConsumingFunc(3)], d=>{ return new Promise(function(resolve) { console.log(d); resolve(); }); } )})();这是我以前的一个提问的最终解决方法,也可以采用我采纳的哪个答案,只是代码会臃肿一些补充:针对你说的情况,可以间隔1s内的鼠标点击作为一组请求用上面方法并发请求,间隔大于1s的同步继发操作
-
慕盖茨4494581
在请求里带一个时间戳参数,然后再原封不动把这个时间戳返回来,并根据时间进行排序。
-
慕少森
其实如果后天和前台能够联动,最好是请求时有一个标号,然后返回时带标号,这样肯定没有问题,且无论多少返回都可以先展示,后期再依序调整。其实如果更友好的,发一次请求,就在数组中填一个展位符信息,接收到一个就更新数组,并刷新展示。
-
当年话下
我的话可能会这么做:function Ajax (option) { this.list = [] let ajax = (data) => { let i = arr.length this.list[i] = '等待结果' $.ajax(option.url, { data:data // ... success: (res) => { this.list[i] = res option.success(res, i) } }) } return ajax}let userAjax = new Ajax({url:xxx,method:xxx})每次请求,直接userAjax(data),然后请求结果的顺序在list上固定好的,怎么响应影响不了然后看你说响应里加字段,那就是后端控制了,你只需要对id进行排序,不过感觉跟你前面说的携带相关参数,响应中返回,本地做mapping关系来实现没什么区别啊,只不过一个前端生成uuid,一个后端生成uuid。