为了账号安全,请及时绑定邮箱和手机立即绑定

怎么在异步请求的情况下,发起的请求有序,返回的时候,数据顺序和请求顺序一样呢?

怎么在异步请求的情况下,发起的请求有序,返回的时候,数据顺序和请求顺序一样呢?

holdtom 2018-09-04 09:17:01
例如,有一个图片数组{pic1,pic2,pic3,pic4,pic5},开多个线程把他们传到服务器上,但是返回的时候(假设返回{result1,result4,result3,result2,result5})是乱序的。如何保持12345,也就是上传时的顺序?android:1。是直接先new了一个list数据就直接按序号使用list的set方法,2.还使用过多线程的join方法或者wait方法可以实现效果,但是这样一个线程等着一个线程效率可能不太好,求好点的实现方法javascript:不太清楚怎么做,求解答
查看完整描述

1 回答

?
缥缈止盈

TA贡献2041条经验 获得超4个赞

JS是单线程的吧,你只能把请求扔到异步上。我之前也遇到过这个问题,后来做成了异步请求队列。

最简单粗暴的方法就是下一个请求应该写在上一个请求的callback里面。假如只是用callback但是写成递归的话,可读性也没什么问题,可以避免}}}}}}}的情况。

次好的方法是用promise的写法,写成链式操作,但是假如你的请求数是不确定的,那么也不可能写死操作链。最终也只能回归到递归这个用法。

最好的方法就是用es7 stage-3的async/await。async/await语法相当于把异步写成的同步语法,然而本质上他还是建立在promise基础上的异步操作。但是有个很蛋疼的问题是,babel只转换语法不转换api,因此你想用async/await,就要加上core-js相应的polyfill……

async/await语法的介绍详细可以看这篇文章:https://github.com/brunoyang/...


查看完整回答
反对 回复 2018-10-17
  • 1 回答
  • 0 关注
  • 787 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信