當我運行這段代碼時,它會給我一個神奇寶貝的隨機順序。我不知道問題出在哪里。
太感謝了。
for (var i = 1; i <= 20; i ) {
apiPokemon("https://pokeapi.co/api/v2/pokemon/" i);
async function apiPokemon(urlPokemon) {
const response = await fetch(urlPokemon);
const dataPokemon = await response.json();
var id = dataPokemon.id;
var name = dataPokemon.name;
console.log(id, name);
}
}
uj5u.com熱心網友回復:
首先是:“為什么他們以隨機順序回來?” - 因為您沒有await對每個回應進行處理。相反,您將觸發所有 20 個可以按任何順序回傳的異步呼叫,因此這就是它們以隨機順序登錄的原因。
為了解決這個問題,我建議進行一些更改:
- 從回圈中提取 apiPokemon 函式,這樣它就不會為每次回圈迭代重新創建
- 從 apiPokemon 函式回傳整個資料物件
- 將所有 apiPokemon 請求添加到一個陣列中并等待它們
Promise.all() - 記錄 Promise.all() 的輸出,您會看到它們現在始終處于正確的順序
async function apiPokemon(urlPokemon) {
const response = await fetch(urlPokemon);
const dataPokemon = await response.json();
return dataPokemon;
}
async function getPokemon(startIndex, stopIndex) {
let requests = [];
for (let i = startIndex; i <= stopIndex; i ) {
requests.push(apiPokemon("https://pokeapi.co/api/v2/pokemon/" i));
}
let pokemonList = await Promise.all(requests);
for (let pokemon of pokemonList) {
console.log(pokemon.id, pokemon.name);
}
}
getPokemon(1, 20)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/534454.html
