我有以下代码:
getContent() {
fetch(this.url)
.then((response) => response.text())
.then((data) => {
let jsonData = JSON.parse(data);
for (let i=0; i<jsonData.results.length; i++) {
this.fetchPokemon(jsonData.results[i].url)
.then(() => console.log("end"));
}
console.log(calls);
})
.catch((error) => console.log(error));
}
fetchPokemon(url) {
return new Promise((resolve) => {
fetch(url)
.then((response) => response.text())
.then((data) => {
let jsonData = JSON.parse(data);
let types = new Array();
for (let i=0; i<jsonData.types.length; i++) {
types.push(jsonData.types[i].type.name);
}
this.pokemons.push(new Pokemon(jsonData.name, types, jsonData.weight, jsonData.sprites.front_default));
resolve();
})
.catch((error) => console.log(error));
});
}
这是我正在处理的 JS 类中的两个函数。如您所见,函数getContent()
执行fetch()
并从 API 获取一些信息。这些信息包含更多的 URL,我也想在其中获取一些信息,因此我放置了一个for
循环来执行第二个函数fetchPokemon(url)
,该函数将进行另一个 API 调用以获取一些其他信息。
我正在努力理解如何检测循环中的getContent()
所有内容何时Promises
得到正确解决,以便我可以继续使用其他功能。我觉得Promise.all
可以提供帮助,但我没有成功。
我怎样才能做到这一点?
尝试使用Promise.all
这样的:
getContent() {
fetch(this.url)
.then((response) => response.text())
.then((data) => {
let jsonData = JSON.parse(data);
const promises = [];
for (let i=0; i<jsonData.results.length; i++) {
promises.push(this.fetchPokemon(jsonData.results[i].url));
}
return Promise.all(promises);
})
.then((results) => {
console.log(results);
})
.catch((error) => console.log(error));
}
所以基本上你只需将所有的 Promise 推送到数组,然后申请Promise.all
等待它们解决。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句