Я пытаюсь дождаться выполнения 1-го обещания, затем 2-х асинхронных обещаний, а затем запустить логику, работающую из всех предыдущих обещаний.
Как я могу этого добиться? Это то, что у меня есть до сих пор, и axios.all(promises) не ждет двух предыдущих асинхронных обещаний.
fetchData = () => {
let promises = [];
axios.get("/api1.json")
.then((response) => {
//do logic 1
})
.then( () => {
promises.push(
() => { return
//data for components
axios.get("/api21.json")
.then(response => { //do logic 2.1 })
}
)
,
promises.push(
() => { return
axios.get("/api22.json")
.then(response => { //do logic 2.2 })
}
)
})
axios.all(promises).then( //do final logic 3 after logic 2.1 and 2.2 have performed ))
}



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете выполнить первый запрос, а затем использовать Promise.all, чтобы дождаться разрешения последних двух обещаний, прежде чем что-либо делать с тремя ответами.
Пример
fetchData = () => {
axios.get("/api1.json").then(response1 => {
Promise.all([axios.get("/api21.json"), axios.get("/api22.json")]).then(
([response2, response3]) => {
console.info(response1, response2, response3);
}
);
});
};
Проблема в том, что вы пытаетесь выполнить обещание axios быстро, а также axios.get слишком глубоко в функции. Не могли бы вы попробовать это:
fetchData = () => {
axios.get("/api1.json")
.then((response) => {
//do logic 1
})
.then( () => {
return axios.all([
//data for components
axios.get("/api21.json")
.then(response => { //do logic 2.1 }),
axios.get("/api22.json")
.then(response => { //do logic 2.2 })
]);
})
.then( // do final logic 3);
}
ваш
axios.allсработает до того, как вы вставите обещания ... вы должны поместить его в тот же блок.