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

多次请求因为网络无法保证响应顺序,如何保证获得所有响应结果后生成的列表结果的顺序与请求顺序一致?

多次请求因为网络无法保证响应顺序,如何保证获得所有响应结果后生成的列表结果的顺序与请求顺序一致?

DIEA 2019-05-22 15:21:08
看很多人都误会成了一次性发送10次,补充为这样:假如用户可以连续点击按钮,每次发1次请求,每次获得响应结果后会生成一个li,因为网络状态的影响后发出的请求可能先响应,假如点了10次,如何保证10个li的顺序与请求的顺序一致!使用Promise.all的答案肯定都是不对的,因为你无法预测用户点击按钮的时机,用户可能一两秒完成10次点击,但也可能在10秒内完成......肯定不能说我等用户点完10次再使用Promise.all请求,何况实际情况不一定是10次。这是我一次面试唯一没答的很好的题目,所以印象比较深刻,我开始也答的Promise.all,被直接否定,后面我提到在请求报文中携带相关参数,响应中返回,本地做mapping关系来实现,但面试官依然不是很满意。后面经我询问后面试官只提到了思路,说了几个词记得不是很清楚,后续查资料猜测貌似是在请求响应包含一个Request-Id字段,并使用UUID作为该值......没实践过不敢确定!
查看完整描述

2 回答

?
BIG阳

TA贡献1859条经验 获得超6个赞

Promise.all可以保证顺序但是得等到所有请求完毕才会触发
functionp1(time){
returnnewPromise(function(resolve,reject){
setTimeout(function(){
resolve(time);
},time);
})
}
Promise.all([p1(5000),p1(1000)]).then(function(res){
console.log(res);//[5000,1000]
});
                            
查看完整回答
反对 回复 2019-05-22
  • 2 回答
  • 0 关注
  • 552 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号