我正在用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个不同的国家名。甚至更好的方法。谢谢!
答案 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谢谢。