В моем приложении Vue. js выполняется несколько вызовов ax ios .get (). Я хотел бы вызвать другую функцию
this.useData()
после того, как все выборки получили ответы. Как я могу это сделать? Я читал о Promise.all (). Если это поможет мне, пожалуйста, посоветуйте, как включить Promise.all в мой код.
fetchData() {
for (let j = 0; j < this.selectedLayers.length; j++) {
if (this.selectedLayers[j].foo == true) {
axios
.get("/maps")
.then(
response => {
console.log(
"received response for this.selectedLayers[" + j + "]"
);
this.selectedLayers[j].data= response.data;
},
error => {
console.log("error fetching data");
}
);
}
}
this.useData();
Если я добавлю async
и await
к моему коду, как показано ниже, Vue. js отвечает с ошибкой ...
Нельзя использовать ключевое слово 'await' вне функции asyn c
await this.fetchData();
this.useData();
async fetchData() {
for (let j = 0; j < this.selectedLayers.length; j++) {
if (this.selectedLayers[j].foo == true) {
await axios
.get("/maps")
.then(
response => {
console.log(
"received response for this.selectedLayers[" + j + "]"
);
this.selectedLayers[j].data= response.data;
},
error => {
console.log("error fetching data");
}
);
}
}
После прочтения форума первый ответ здесь рекомендуется изменить код следующим образом ...
fetchData() {
return new Promise(resolve => {
if (this.selectedLayers[j].foo == true) {
axios
.get("/maps")
.then(
response => {
console.log(
"received response for this.selectedLayers[" + j + "]"
);
this.selectedLayers[j].data= response.data;
},
error => {
console.log("error fetching data");
}
);
}
})};
let promises = [];
for (var i = 0; i < this.selectedLayers.length; i++) {
promises.push(this.fetchData(i));
}
Promise.all(promises)
.then(results => {
this.useData();
})
.catch(e => {
// Handle errors here
});
Promise.all () никогда не выполняется. Я предполагаю, что есть нюанс с использованием Promise.all () в тандеме с топором ios .get ()?