Javascript 如何保证es6中的所有退货订单
我正在使用ES6JavaScript,并根据返回顺序进行API调用。http客户端是Axios。一位同事指示我使用Javascript 如何保证es6中的所有退货订单,javascript,ecmascript-6,promise,axios,Javascript,Ecmascript 6,Promise,Axios,我正在使用ES6JavaScript,并根据返回顺序进行API调用。http客户端是Axios。一位同事指示我使用Promise.all()。它工作正常,我知道它肯定会,但我不确定如何才能保证结果正常。我的理解是,异步请求不能得到保证!我的简化代码是: Promise.all([ axios.get('/cars'), axios.get('/road-conditions') ]).then(values => { this.cars = values[0]
Promise.all()
。它工作正常,我知道它肯定会,但我不确定如何才能保证结果正常。我的理解是,异步请求不能得到保证!我的简化代码是:
Promise.all([
axios.get('/cars'),
axios.get('/road-conditions')
]).then(values => {
this.cars = values[0]
this.roadConditions = values[1]
})
我想了解
值如何知道哪个请求是哪个请求。这是Axios的一项特殊功能吗?没有什么好办法:Promise。所有的都只记得Promise的索引,并将该Promise的结果保存到它构建的阵列中的正确插槽中。它不只是使用push
来构建阵列(因为那样确实会很混乱)
下面是一个这样做的示例,向您大致展示了封面下发生的事情:
函数随机延迟(val){
返回新承诺(解决=>{
设置超时(
决定
Math.random()*1000,
瓦尔
);
});
}
//见:https://tc39.es/ecma262/#sec-表演表演
函数fakeAll(iterable){
返回新承诺((解决、拒绝)=>{
常量值=[];
设remainingElementsCount=1;
设指数=0;
for(iterable的常量值){
const thisIndex=index;//记住此结果的索引
resolve(value)//处理表和原始值
.然后(val=>{
log(`values[${thisIndex}]=${JSON.stringify(val)}`);
值[thisIndex]=val;//{
控制台日志(结果);
})
.catch(错误=>{
控制台错误(error);
});
。作为控制台包装器{
最大高度:100%!重要;
}
承诺。所有
按照与您传递给它的承诺数组相同的顺序提供解析值。这里不保证的是请求到达服务器的顺序。感谢您的响应,我确实理解数组中的顺序是受尊重的,我只是不清楚承诺如何保证顺序。承诺。所有等待数组中的所有承诺都已兑现,然后才能兑现。因此,无论收到的顺序如何,您都会按照指定的顺序得到答案。我明白了,谢谢您的解释。