如何执行并行请求并返回包含Javascript中所有并行响应的对象?
因此,我知道我可以使用如何执行并行请求并返回包含Javascript中所有并行响应的对象?,javascript,Javascript,因此,我知道我可以使用Promise.all()或Promise.allsolited()在Javascript/ReactNative中发出并行请求并等待: 但是如果我想做这样的事情: var result = {} await Promise.all([ result["response1"] = request1(), result["response2"] = request2(), result["respons
Promise.all()
或Promise.allsolited()
在Javascript/ReactNative中发出并行请求并等待:
但是如果我想做这样的事情:
var result = {}
await Promise.all([
result["response1"] = request1(),
result["response2"] = request2(),
result["response3"] = request3()
]);
return result;
request1 = async() => {
return client.post(....).then(async(response) => {
this.request1response = response
return response
})
}
// same thing with request2() and request3()
parallelRequest = async() => {
var result = {}
await Promise.all([
request1(),
request2(),
request3()
]);
result["response1"] = this.request1response
result["response2"] = this.request2response
result["response3"] = this.request3response
delete this.request1response
delete this.request2response
delete this.request3response
return result;
}
目前我做的工作如下:
var result = {}
await Promise.all([
result["response1"] = request1(),
result["response2"] = request2(),
result["response3"] = request3()
]);
return result;
request1 = async() => {
return client.post(....).then(async(response) => {
this.request1response = response
return response
})
}
// same thing with request2() and request3()
parallelRequest = async() => {
var result = {}
await Promise.all([
request1(),
request2(),
request3()
]);
result["response1"] = this.request1response
result["response2"] = this.request2response
result["response3"] = this.request3response
delete this.request1response
delete this.request2response
delete this.request3response
return result;
}
但我认为这是一种糟糕的模式,容易出现bug(如果parallelRequest被快速连续调用多次),我想寻找一种更好的方法来实现它。您应该这样做:
var result = {}
await Promise.all([
result["response1"] = request1(),
result["response2"] = request2(),
result["response3"] = request3()
]);
return result;
request1 = async() => {
return client.post(....).then(async(response) => {
this.request1response = response
return response
})
}
// same thing with request2() and request3()
parallelRequest = async() => {
var result = {}
await Promise.all([
request1(),
request2(),
request3()
]);
result["response1"] = this.request1response
result["response2"] = this.request2response
result["response3"] = this.request3response
delete this.request1response
delete this.request2response
delete this.request3response
return result;
}
constparallelrequest=async()=>{
const[response1,response2,response3]=等待承诺([
请求1(),
请求2(),
请求3(),
]);
常量结果={response1,response2,response3};
返回结果;
};
因为Promise.all返回所有响应的数组,其顺序与提供的承诺数组相同
- 步骤1:将响应数组分解为所有响应
- 步骤2:使用变量名称作为结果对象中的键构建响应对象
- 步骤3:返回结果对象
{response1,response2,response3}