Javascript 使用Axios发出2个连续请求-第二个请求取决于第一个请求的响应
以下代码未在解析前等待Javascript 使用Axios发出2个连续请求-第二个请求取决于第一个请求的响应,javascript,reactjs,axios,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
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);
})
returnrequest.get(`${}`)
。然后((res)=>{
if(res1.data[0]){
data1=res.data[0]};
}否则{
request.get(`${`)
。然后((res2)=>{
data1=res2.data
});
}
返回承诺。解决(数据1);
})
提前谢谢
San我想你可以这样做
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
}));
我认为这应该有帮助。您可以阅读更多您可以使用async并在此处等待,如下所示:
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;
}
异步函数getData(){
const firstRequest=wait axios.get(`${}`);
data1=firstRequest.data[0];
如果(!data1){
const secondRequest=wait axios.get(`${}`);
data1=secondRequest.data;
}
返回数据1;
}
那是因为你做错了:) 当程序执行遇到“异步”操作(使用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);
});
}
});
returnrequest.get(`${}`)
。然后((res1)=>{
if(res1.data[0]){
data1=res1.data[0]
返回承诺。解决(数据1);
}否则{
request.get(`${`)
。然后((res2)=>{
data1=res2.data
返回承诺。解决(数据1);
});
}
});
希望这有助于
克林顿。以下是我如何根据第一个请求返回的值触发请求列表,然后将该数据添加到第一个请求,然后返回该数据 在我的示例中,我得到一个事件列表,然后每个事件都有一个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
}
异步函数getEvents(){
常量事件=等待axios
.得到(
eventsUrl,
配置
)
。然后(res=>{
如果(资源状态===200){
让事件=res.data.events.filter(
event=>event.status=='live'| |'completed'
)
events.map(event=>{
event.urlPath=event.name.text.replace(/\s+/g,'-')。toLowerCase()
})
返回事件
}
})
。然后(异步事件=>{
const承诺=等待事件。map(event=>axios.get(
`https://www.eventbriteapi.com/v3/events/${event.id}/description`,
配置
))
等待承诺。所有(承诺)
。然后(值=>{
return events.forEach((事件,索引)=>{
event.description.html=值[index].data.description.replace(`${event.description.text}\n`,'')
console.log(event.description.text)
})
})
返回事件
})
.catch(错误=>{
console.log(错误)
})
返回等待事件
}
实际上,我想根据第一个请求返回的一个值触发第二个请求。请参阅:“if(res1.data[0]){”。当第一个源中缺少ir时,我正在尝试从第二个源中获取相同的数据-谢谢您可以使用@Dij.建议的
异步等待
,这更干净。