为了账号安全,请及时绑定邮箱和手机立即绑定

无法为数组中的变量赋值

无法为数组中的变量赋值

当年话下 2022-08-18 10:46:55
我正在用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 wordsasync 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个不同的国家/地区名称。有人可以向我解释这一点,或者也许有更好的方法。谢谢!
查看完整描述

2 回答

?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

好的,所以我改变了一点代码。


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


查看完整回答
反对 回复 2022-08-18
?
眼眸繁星

TA贡献1873条经验 获得超9个赞

读取尚未解决,并且在执行时尚未填充。使用 Promise.all,然后:words[]selectedWords =


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;

}


查看完整回答
反对 回复 2022-08-18
  • 2 回答
  • 0 关注
  • 82 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信