⊗jsSpPrmSS 174 of 294 menu

JavaScriptにおける同期スタイルのプロミス

Promise hell問題を解決するために、 非同期コードをはるかに簡単に書けるようにする 特別なプロミス構文が考案されました - 同期スタイルで書くことができます。

それでは、その学習を始めましょう。まずは 前のレッスンのコードを見てみます:

function func() { getSmth(2).then(res => { console.log(res); // 4を出力 }); } func();

もし関数getSmthが同期関数だった場合、 関数funcのコードは次のように書き換えることができたでしょう:

function func() { let res = getSmth(2); console.log(res); // 4を出力 }

しかし、関数getSmthは非同期なので、 上記のコードは動作しません。 ですが、プロミスの同期スタイルを利用すれば、 同様のことを実現できます。やってみましょう。

まず、特別なキーワードasyncを使って 関数funcを非同期関数として宣言する必要があります:

async function func() { }

その後、関数func内部で特別なキーワード awaitを使用できるようになります。 このキーワードはプロミスの前に書くことで、 JavaScriptにそのプロミスが完了するまで待機させます。 その後、このキーワードはプロミスの結果を返し、 コードの実行が再開されます。

今回の場合、getSmthの呼び出しの前に awaitを書く必要があります。 この関数の呼び出し結果はプロミスなので、 そのプロミスが完了した後にのみコードの実行が続行されます。 そして、プロミスの結果を変数に代入できます。 上記を実装してみましょう:

async function func() { let res = await getSmth(2); console.log(res); // 4を出力 } func();

では、getSmthを複数回呼び出してみましょう:

async function func() { let res1 = await getSmth(2); let res2 = await getSmth(3); console.log(res1 + res2); // 13を出力 } func();

次に、ループ内でgetSmthを呼び出してみます:

async function func() { let arr = [1, 2, 3, 4, 5]; let sum = 0; for (let elem of arr) { sum += await getSmth(elem); } console.log(sum); } func();

以下のコードを同期構文で書き直してください:

function func() { getSmth(2).then(res1 => { getSmth(3).then(res2 => { getSmth(4).then(res3 => { console.log(res1 + res2 + res3); }); }); }); } func();
日本語
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItalianoქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
当サイトでは、サイトの動作、分析、パーソナライゼーションのためにクッキーを使用しています。 データ処理はプライバシーポリシーに従って行われます。
すべて受け入れる 設定 拒否