使用 Axios 发出 2 个连续请求 - 第二个请求取决于第一个请求的响应
Making 2 sequential requests with Axios - second request depends on the response of 1st
以下代码在解析之前不等待 else
部分到 return 数据。
这段代码哪里出错了?
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);
})
提前致谢。
三
我想你可以这样做
function getUserAccount() {
return axios.get('/user/12345');
}
function getUserPermissions() {
return axios.get('/user/12345/permissions');
}
axios.all([getUserAccount(), getUserPermissions()])
.then(axios.spread(function (acct, perms) {
// Both requests are now complete
}));
我认为它应该有所帮助。你可以阅读更多here
你可以在这里使用 async 和 await,像这样:
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;
}
那是因为你做错了:)
当程序执行遇到'async'操作(用axios发起网络请求)时,会调度任务,继续执行下面几行代码。这包括任何 return 语句。
您的 return 应该出现在 '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);
});
}
});
希望这对您有所帮助...
克林顿。
这是我如何根据第一个请求 return 编辑的值触发请求列表,然后将该数据添加到第一个请求,然后 return 那。
在我的示例中,我得到了一个事件列表,然后每个事件都有一个 ID(从第一个 axios.get 中检索),我需要用后续的 axios.get 获取事件描述,但是这是我需要为每个事件获取的唯一额外数据,因此我只需将事件列表中的每个事件简短描述替换为后续 axios.get
中的详细描述
async function getEvents() {
const events = await axios
.get(
eventsUrl,
config
)
.then(res => {
if (res.status === 200) {
let events = res.data.events.filter(
event => event.status === 'live' || 'completed'
)
events.map(event => {
event.urlPath = event.name.text.replace(/\s+/g, '-').toLowerCase()
})
return events
}
})
.then(async events => {
const promises = await events.map(event => axios.get(
`https://www.eventbriteapi.com/v3/events/${event.id}/description`,
config
))
await Promise.all(promises)
.then(values => {
return events.forEach((event, index) => {
event.description.html = values[index].data.description.replace(`<div>${event.description.text}</div>\n`, '')
console.log(event.description.text)
})
})
return events
})
.catch(err => {
console.log(err)
})
return await events
}
以下代码在解析之前不等待 else
部分到 return 数据。
这段代码哪里出错了?
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);
})
提前致谢。
三
我想你可以这样做
function getUserAccount() {
return axios.get('/user/12345');
}
function getUserPermissions() {
return axios.get('/user/12345/permissions');
}
axios.all([getUserAccount(), getUserPermissions()])
.then(axios.spread(function (acct, perms) {
// Both requests are now complete
}));
我认为它应该有所帮助。你可以阅读更多here
你可以在这里使用 async 和 await,像这样:
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;
}
那是因为你做错了:)
当程序执行遇到'async'操作(用axios发起网络请求)时,会调度任务,继续执行下面几行代码。这包括任何 return 语句。
您的 return 应该出现在 '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);
});
}
});
希望这对您有所帮助...
克林顿。
这是我如何根据第一个请求 return 编辑的值触发请求列表,然后将该数据添加到第一个请求,然后 return 那。
在我的示例中,我得到了一个事件列表,然后每个事件都有一个 ID(从第一个 axios.get 中检索),我需要用后续的 axios.get 获取事件描述,但是这是我需要为每个事件获取的唯一额外数据,因此我只需将事件列表中的每个事件简短描述替换为后续 axios.get
中的详细描述async function getEvents() {
const events = await axios
.get(
eventsUrl,
config
)
.then(res => {
if (res.status === 200) {
let events = res.data.events.filter(
event => event.status === 'live' || 'completed'
)
events.map(event => {
event.urlPath = event.name.text.replace(/\s+/g, '-').toLowerCase()
})
return events
}
})
.then(async events => {
const promises = await events.map(event => axios.get(
`https://www.eventbriteapi.com/v3/events/${event.id}/description`,
config
))
await Promise.all(promises)
.then(values => {
return events.forEach((event, index) => {
event.description.html = values[index].data.description.replace(`<div>${event.description.text}</div>\n`, '')
console.log(event.description.text)
})
})
return events
})
.catch(err => {
console.log(err)
})
return await events
}