Promise.all内部带有承诺链

时间:2018-09-12 12:05:45

标签: javascript node.js asynchronous promise es6-promise

我有一个这样的方法:

doSomeRequests(listOfRequestParameters) {
  let requests = listOfRequestParameters.map(parmeter => {
    return axios.get(url + parmeter)
    .then(data => {
      const parameters= data.parameters;
      return axios.delete(url, parameters)
    })
  })
  return Promise.all(requests);
}

在此函数中,我想为列表中的每个元素(listOfRequestParameters)完成API请求,但是对于列表中的每个元素,我必须执行两个API请求。

axios方法都返回Promises。

问题是我确实捕获了Promise返回的y doSomeRequests方法的结果,但是如果一个API请求失败,则会收到UnhandledPromiseRejectionWarning。

我想念什么?有没有办法做这种承诺链?

2 个答案:

答案 0 :(得分:0)

感谢@charlietfl询问我是否真的export const getSport(state, sport) { return state.cards[sport]; } 。原来我没有,我不小心做了doSomeRequests(..).then().catch(),但是某种程度上说服了我需要在“复杂的” Promise链中搜索错误。

无论如何,对于这个无用的问题,我感到抱歉,谢谢您的帮助。

答案 1 :(得分:0)

您需要确保map调用返回一个promise列表,通过async / await简化操作,您会得到一些帮助:

async doSomeRequests(listOfRequestParameters) {
  return Promise.all(listOfRequestParameters.map(async parmeter => {
    const data = await axios.get(url + parameter);
    const parameters = data.parameters;

    return axios.delete(url, parameters);
  }));
}

await doSomeRequests(listOfRequestParameters);