我正在练习我的JavaScript技能做一个笑话机器从一个API收集笑话,并显示它们,我的问题是,目前,我正在使用.then()
这是很好的,但我想知道如何得到我的阵列中的结果不必等待.then()
像fetchJokes().then(jokes => console.log(jokes));
使用异步/等待然后()如何在数组中保存结果
我曾经有导航阵列像这样的功能:
let counter = 0;
let jokes = [joke1, joke2, joke3, joke4];
function nextJoke(jokes) {
counter++;
counter %= jokes.length; // start from 0 if we get to the end of the array
return jokes[counter]; // give us back the actual item
}
从API获取之前就是这样使用的。
这是我当前的代码:
const url = "https://api.icndb.com/jokes/random/5";
const fetchButton = document.querySelector("button[type=button][value=Fetch]");
async function fetchJokes() {
let jokes = [];
let data = await (await fetch(url)).json();
for (let i = 0; i < 5; i++) {
jokes[i] = data.value[i].joke;
}
return jokes;
}
fetchButton.addEventListener("click",() => {
fetchJokes().then(jokes => console.log(jokes));
});
<button type="button" value="Fetch">Fetch Jokes</button>
所以我想通了如何使用按钮和所有的爵士乐,只是寻求帮助如何传递,即时通讯对象从fetchJokes()
接收并将其存储在数组中。
嗯......你已经做的是,它似乎。 –
是的,你已经从你的异步方法返回一个数组。 – Niladri
你不能像以前那样(不应该)将它存储在一个全局数组中。当请求仍在加载时调用'nextJoke'函数时,你会做什么? A)它必须等待自己 - 因此在全局变量中存储数组的承诺B)在承诺履行之前它不会被调用 - 所以只需在'then'处理程序中声明 – Bergi