Node.js 无法在promise.all中检索响应

Node.js 无法在promise.all中检索响应,node.js,typescript,firebase,google-cloud-functions,Node.js,Typescript,Firebase,Google Cloud Functions,我正在打一个类似下面的平行电话 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.stringi

我正在打一个类似下面的平行电话

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);
下面是函数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,并且能够在函数中得到响应。 但是,当承诺得到解决并按照如何提供输入的顺序收集响应时,就不会从承诺中收集响应。 日志显示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
这里我缺少了什么。

异步函数不返回任何值,因此它们返回的承诺将有一个未定义的解析值。您的return语句在.then或.catch回调中。在顶层没有任何实际设置异步函数解析值的返回。你需要回报你从等待中获得的价值,或者摆脱等待,只是回报承诺

function Function2(yyyyReq) {
  console.log("Start - Function2");

  return 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");
      throw error;
    });
}
而且,一旦删除wait并从axios调用中返回承诺,您就不再需要异步函数了

此外,如果希望.catch仍然拒绝承诺,则需要重新显示错误

如果希望保持async/await,则必须捕获并返回值

async function Function2(yyyyReq) {
  console.log("Start - Function2");

  let val = 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");
      throw error;
    });
  return val;
}

还添加了any作为函数的返回类型。
async function Function2(yyyyReq) {
  console.log("Start - Function2");

  let val = 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");
      throw error;
    });
  return val;
}