借助Axios,我正在尝试:
具有成功响应(或有错误,返回错误)的帖子请求
如果第一个请求成功,则在响应中使用返回值,然后将第二个请求发布到不同的端点
我最近遇到的是:
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.
})
但这会立即调用,所以我不能将值传递给第二个帖子吗?
答案 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);
});