簡體   English   中英

無法為數組中的變量賦值

[英]Can't assign value to a variable from array

我正在 JavaScript 中創建一個簡單的項目,但似乎無法弄清楚為什么這對我不起作用。 我創建了一個 function 獲取 API 以獲取隨機國家名稱,然后將該國家名稱推入一個空數組,但我似乎無法弄清楚如何從該數組中為我的變量賦值,可能遺漏了一些東西在這里很容易。

getRandomWord();
getRandomWord();
getRandomWord();
getRandomWord();

const words = [];

let selectedWord = words[Math.floor(Math.random() * words.length)];

console.log(words);
console.log(selectedWord);


// Fetch some random words
async function getRandomWord() {
  const res = await fetch('https://randomuser.me/api');
  const data = await res.json();

  const randomWord = data.results[0].location.country;

  words.push(randomWord);
}

我需要從單詞數組中為 selectedWord 分配一個隨機國家名稱,但它總是拋出未定義,盡管我在單詞數組中的位置從 0 到 3 看到 4 個不同的國家名稱。有人可以向我解釋一下,或者可能有更好的方法。 謝謝 !

selectedWords =執行時,提取尚未解決且words[]尚未填充。 使用 Promise.all 然后:

 const p = Promise.all([ getRandomWord(), getRandomWord(), getRandomWord(), getRandomWord() ]); const words = []; p.then(()=>{ const selectedWord = words[Math.floor(Math.random() * words.length)]; console.log(words); console.log(selectedWord); }); // Fetch some random words async function getRandomWord() { const res = await fetch('https://randomuser.me/api'); const data = await res.json(); const randomWord = data.results[0].location.country; words.push(randomWord); }

注意:如果您不想要快速失敗行為,您將需要使用 Promise.allSettled,任何失敗都會導致它立即返回。 另請注意,我正在使用 Promise.all 以便它同時運行提取而不是按順序等待它們。

async/await 而不是 then

 (async()=>{ let words = []; for(var i = 0; i < 4; i++) words.push(getRandomWord()); words = await Promise.all(words); const selectedWord = words[Math.floor(Math.random() * words.length)]; console.log(words); console.log(selectedWord); })() // Fetch some random words async function getRandomWord() { const res = await fetch('https://randomuser.me/api'); const data = await res.json(); const randomWord = data.results[0].location.country; return randomWord; }

好的,所以我稍微更改了代碼。

async function getRandomWord() {
  try {
    const res = await fetch('https://randomuser.me/api');
    const data = await res.json();

    const randomWord = data.results[0].location.country;

    return randomWord.toUpperCase();

    // words.push(randomWord.toUpperCase());
  } catch (e) {
    console.log(
      'There has been a problem with your fetch operation: ' + e.message
    );
  }
}

然后只是打電話

(async () => {
  selectedWord = await getRandomWord();
  displayWord();
})();

不敢相信我這樣做了:D 謝謝。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM