看很多人都误会成了一次性发送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]});
添加回答
举报
0/150
提交
取消