无法将值分配给数组中的变量

时间:2020-05-14 21:06:58

标签: javascript arrays variables

我正在用JavaScript创建一个简单的项目,似乎无法弄清楚为什么它对我不起作用。我创建了一个函数,该函数获取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);
}

我需要从words数组中为selectedWord分配一个随机的国家名,但是它总是抛出未定义的,尽管我在words array中从0到3的位置看到4个不同的国家名。甚至更好的方法。谢谢!

2 个答案:

答案 0 :(得分:0)

执行words[]时,获取尚未解决,并且selectedWords =尚未填充。使用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()=>{
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;
}

答案 1 :(得分:0)

好,所以我更改了一些代码。

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谢谢。