使用 Axios 发出 2 个连续请求 - 第二个请求取决于第一个请求的响应

kal*_*ada 4 javascript reactjs axios

以下代码else在解析之前不等待部件返回数据。

这段代码我哪里出错了?

return request.get(`${<URL1>}`)
.then((res) => {
    if (res1.data[0]) {
        data1 = res.data[0]};
    } else {
        request.get(`${<URL2>`)
            .then((res2) => {
                data1 = res2.data
            });
    }
    return Promise.resolve(data1);
})
Run Code Online (Sandbox Code Playgroud)

提前致谢。

小智 6

那是因为你做错了:)

当程序执行遇到“异步”操作(使用 axios 发出网络请求)时,它会调度任务并继续执行以下代码行。这包括任何返回语句。

您的回报应出现在“then”子句中:

return request.get(`${<URL1>}`)
    .then((res1) => {
        if (res1.data[0]) {
            data1 = res1.data[0]
            return Promise.resolve(data1);
        } else {
            request.get(`${<URL2>`)
                .then((res2) => {
                    data1 = res2.data
                    return Promise.resolve(data1);
                });
        }
    });
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助...

克林顿。


Dij*_*Dij 5

您可以在这里使用 async 和 wait ,如下所示:

 async function getData() {
      const firstRequest = await axios.get(`${<URL1>}`);
      data1 = firstRequest.data[0];
      if (!data1){
          const secondRequest = await axios.get(`${<URL2>}`);
          data1 = secondRequest.data;
      }
      return data1;
  }
Run Code Online (Sandbox Code Playgroud)