APIからジョークを収集して表示するジョークマシンをJavaScriptスキルで練習していますが、現在私は.then()
を使用していますこれは結構ですが、私はfetchJokes().then(jokes => console.log(jokes));
async/awaitとthen()を使用して結果を配列に保存する
に私はこのような配列をナビゲート機能を持っていたよう.then()
を待つ必要はありません配列内の私の結果を得るのですか知りたい:
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