如何执行并行请求并返回包含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}