Axios 2发布请求-在第二个请求中使用第一个发布的响应?

时间:2020-04-08 16:35:58

标签: reactjs api post axios

借助Axios,我正在尝试:

  1. 具有成功响应(或有错误,返回错误)的帖子请求

  2. 如果第一个请求成功,则在响应中使用返回值,然后将第二个请求发布到不同的端点

我最近遇到的是:

import axios from 'axios';

let one = "https://api.storyblok.com/v1/cdn/stories/health?version=published&token=wANpEQEsMYGOwLxwXQ76Ggtt"
let two = "https://api.storyblok.com/v1/cdn/datasources/?token=wANpEQEsMYGOwLxwXQ76Ggtt"
let three = "https://api.storyblok.com/v1/cdn/stories/vue?version=published&token=wANpEQEsMYGOwLxwXQ76Ggtt"

const requestOne = axios.get(one);
const requestTwo = axios.get(two);
const requestThree = axios.get(three);

axios.all([requestOne, requestTwo, requestThree]).then(axios.spread((...responses) => {
  const responseOne = responses[0]
  const responseTwo = responses[1]
  const responesThree = responses[2]
  // use/access the results 
})).catch(errors => {
  // react on errors.
})

但这会立即调用,所以我不能将值传递给第二个帖子吗?

2 个答案:

答案 0 :(得分:2)

在您的情况下,这不适用,因为第二个api调用取决于第一个api调用结果。

我建议使用async-await进行第一个呼叫,直到响应返回,然后使用该呼叫进行第二个呼叫。

尝试这样的事情:

async function callApis(){
let responseOne = await fetch("/endpointOne");
// Check for response and if successful call the second api
let responseTwo = await fetch("/endpointTwo");
}

简而言之,请等待第一个api完成后再调用第二个api。

希望有帮助!

已编辑以使用提取。对于您是否要使用axios,我不清楚。

答案 1 :(得分:1)

因此遇到了这个问题并尝试:

axios.get(`/endpoint`) 
.then(
  responseA =>
    Promise.all([
      responseA,
      axios.get("/endpointB")
    ])   
)
.then(
  ([responseA,responseB]) => {
  console.log(responseA,responseB);
})
.catch((err) => {
    console.log(err.message);
});