【发布时间】:2019-04-26 23:00:18
【问题描述】:
我正在进行如下所示的并行调用。
let parllel_call: [Promise<any>, Promise<any>] = [
Function1(xxxxReq),
Function2(yyyyReq),
];
let parllel_call_result = await Promise.all(parllel_call);
console.log('parllel_call_result ', JSON.stringify(parllel_call_result));
let xxxxRes = parllel_call_result[0];
console.log('xxxxRes.status '+xxxxRes.status+' message '+xxxxRes.message+' message '+xxxxRes.data.message);
let yyyyRes = parllel_call_result[1];
console.log('yyyyRes.status '+yyyyRes.status+' message '+yyyyRes.message+' message '+yyyyRes.data.message);
下面是函数1。
async function Function1(xxxxReq) {
console.log("Start - Function1");
await axios
.post(some_url, axxxxReq)
.then(res => {
console.log('response '+res.status+' message '+res.message);
console.log("End - Function1");
return res;
})
.catch(error => {
console.error("error " + error);
console.log("End - Function1");
return error;
});
}
下面是函数2。
async function Function2(yyyyReq) {
console.log("Start - Function2");
await axios
.post(some_other_url, yyyyReq)
.then(res => {
console.log('response '+res.status+' message '+res.data.message);
console.log("End - Function2");
return res;
})
.catch(error => {
console.error("error " + error);
console.log("End - Function2");
return error;
});
}
我能够并行调用函数 1 和 2,并且能够在函数中获得响应。 但是,当 Promise 被解析并按照输入的顺序收集响应时,响应不是从 Promise 中收集的。 日志说 null 被传递到 Promise.all 响应数组中。
下面是执行日志。
info: Doing parllel call
Start - Function1
Start - Function2
info: response 200 message undefined
info: End - Function1
info: response 200 message undefined
info: End - Function2
parllel_call_result [null,null]
error endAssesment TypeError: Cannot read property 'status' of undefined
info: Execution took 14323 ms, user function completed successfully
我在这里缺少什么。
【问题讨论】:
标签: node.js typescript firebase google-cloud-functions