代码之家  ›  专栏  ›  技术社区  ›  c3ntry

承诺。所有承诺链内

  •  1
  • c3ntry  · 技术社区  · 6 年前

    我有这样的方法:

    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方法都返回了承诺。

    我错过了什么?有没有办法做到这种承诺链?

    3 回复  |  直到 6 年前
        1
  •  0
  •   c3ntry    6 年前

    感谢@charlietfl问我是不是真的 doSomeRequests(..).then().catch() . 原来我没有,我不小心做了 doSomeRequests(..).then().then() 但不知何故,我确信我需要寻找“复杂”承诺链中的错误。

    不管怎样,我很抱歉这个没用的问题,谢谢你的帮助。

        2
  •  0
  •   Lukasz Wojciak    6 年前

    您需要确保map调用返回一个承诺列表,通过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);