JavaScriptは同期しているため、コードの各行は互いに直後に実行されます。
我々は
1. let splatshArtData = [];
2. splatshArt.getSplatchArt(participants[i].championId).then((splatshArtUrl) => {
3. splatshArtData.push(splatshArtUrl);
});
4. console.log(splatshArtData);
の下にあなたが実際にそれが順に実行される一方、それは、1、2、3、4の順に実行されることを想定しているように行番号を使用してコードに注釈を付ける場合1、2、4、3それはなぜですか? JavaScriptは同期式であり、2行目の関数は非同期であるため、処理を続行するには待つ必要があります。そうしないと、splatshArtData
変数はデータがまだフェッチされていないため空の配列になります。
あなたが取得したデータを返し、別の関数でそれを使用したい場合、あなたはそれを混在させることはできませんでしょう別の答えで提案されているように、コールバックが、その代わりにチェーン約束とフェッチ機能から解決された値を使用しますデータ。あなたのコードを見てみると
function getSplatshArt() {
let splatshArtData = [];
//Return a promise
return splatshArt.getSplatchArt(participants[i].championId).then((splatshArtUrl) => {
console.log(splatshArtData); //this will log out the data
splatshArtData.push(splatshArtUrl);
return splatshArtData; //this will be the resolved value from the promise
});
}
//Call the function and access the resolved data in the .then() block
getSplatshArt()
.then(data => {
console.log(data); //this is the data returned from the getSplatshArt function
});
、私はあなたがIDの配列をループしている印象を受ける、とあなたは、一度にこの文句を言わない作業を複数の値を取得したい場合は、複数の約束を処理する必要があるため。しかし、それはもう一つの質問です。私は、あなたがそれについて尋ねる前に、自分の研究についてもっと研究すべきだと思います。
'.save'メソッドとは何ですか?アレクサンドル・IonutMihaiああ、何もない、汚いコード@ –
:pは、あなたの 'はconsole.log(splatshArtData)を移動 –
;' '.then()'ブロックに、それが動作します。あなたの関数呼び出しは非同期ですが、同期のように扱うので、エラーです。 –