・非同期 - のawaitシンタックスシュガーの約束とジェネレーター、目的コードの可読性を高めるために、コードを書くときにちょうど私達がより流暢にします。
・非同期 - のawaitのメカニズムは、約束の上に構築され、その場所を取ることができません
基本的な構文:
非同期関数demo01(){ LET結果 = のawait Math.random() はconsole.log(結果) } demo01() // 乱数出力
非同期:
非同期非同期関数を表すために使用され、定義されたプロミスオブジェクトを返す関数は、次に、コールバックメソッドを使用して追加することができます
非同期関数demo02(){ リターン '戻り結果' } demo02()、次いで(RES。 =>にconsole.log(RES))// 出力:リターン結果(非同期定義関数(Promise.resolveに対応する値を返す場合「リターン結果「))
await:のawaitは、単独で使用することができない非同期機能の中に現れなければなりません。
・のawait表現の後ろに任意のJSに従うことができます。その主な目的は、プロミスオブジェクトが解決された状態を待つことです。
await非同期関数原因オブジェクトの約束である場合に 停止
実行し、 等待 Promise
決済などの場合は、通常の表現即座に実行されます。
用途:
関数SLEEP(秒){ 戻り 新しい新しいプロミス((解決、拒否)=> { たsetTimeout(() => { 解決( '十分な睡眠〜' ) }、秒) }) } 非同期関数dome03(){ のawait() = > {にconsole.log(「式即時実行」)} LET結果 =のawait睡眠(2000 ) はconsole.log(結果) // スリープ機能の実行が完了するが、出力を解決するまで待つ必要性は(2000ミリ秒後の出力:十分な睡眠〜) }
例1(要求がパラメータ要求に依存していると非同期の例を待つために返すようにシミュレーション):
// アナログ非同期要求の 関数SLEEP(SECOND、PARAM){ 戻り 新しい新しいプロミス((解決、拒否)=> { たsetTimeout(() => { 解決(PARAM); }、SECOND); }) } 非同期機能テスト() { せ結果1 =のawait SLEEP(2000、 'req01' ) // 完了の最初の実装のための待ち時間が待つ LETはのawait SLEEPを結果2 =(1000 'req02' + 結果1) // 第二のawait実行完了待ちが result3 =のawait睡眠を聞かせ(500「req03」+ 結果2) // すべてのawaitの実行の完了を待ちます console.log( `$ --- $ {} {result3結果2} --- $ {}`結果1) } テスト() // すべての出力のawait実行完了待ち:req01 --- --- req02req01 req03req02req01
実施例2(必要に応じて非同期送信要求を複数の要求は、独立したインスタンスです)。
関数SLEEP(SECOND){ 返す 新しい新しい約束((解決、拒否)=> { のsetTimeout(() => { 解決( '要求がDONE!' + Math.random()); }、SECONDを); }) } // 正しい言葉遣い 非同期関数correctDemo(){ せP1 = SLEEP(1000年); せP2 = SLEEP(1000年); せP3 = SLEEP(1000年); // Promise.all( 'オブジェクト反復')約束の複数例えば、新しいインスタンスn回処理されたオブジェクトの約束、約束にパッケージ。 await Promise.all([P1、P2、 P3])。 console.log( '〜クリアロード' ); } // 書き込みエラー:同期要求は、1が第二の待つ実行するのawait受容溶液への最初の睡眠を待つ必要があり、次の行に沿って達成することができない 非同期機能をbugDemo(){ のawait睡眠( 1000年) のawait SLEEP( 1000年) のawait SLEEP( 1000年) はconsole.log( '〜クリアザ・ロード' ) } correctDemo() bugDemo()
エラー処理:
処理エラー
関数SLEEP(SECOND){ 返す 新しい新しい約束((解決、拒否)=> { setTimeoutメソッドは、(() => { (拒否 'SLEEP〜したい' ); }、SECONDを); }) } 非同期機能errorDemoSuper(){ 試み{ LET結果 =のawait SLEEP(1,000 ) にconsole.log(結果); } キャッチ(ERR){ にconsole.log(ERR); // 結果のawait拒否待ったときに実行 } } errorDemoSuper()// 出力:眠りたい〜
エラーをキャッチ:
// 例外投げるのメソッドの定義 機能ErrorTest(SECOND){ スロー 新しい新しいエラー(「例外をスローを!」) }
モード1:ください... catchキャプチャ
試す{ errorTest() } キャッチ(エラー){ にconsole.log(誤差) }
モード2:その後、コールバックをキャプチャ
errorTest()。その後、( 決意 => はconsole.log(解決)、 エラー => はconsole.log(エラー) )
モード3:キャッチ約束でキャッチ
errorTest()。キャッチ( エラー => はconsole.log(エラー) )
、あなたは常に成功する方法を持ちたい脱出したい言い訳は常にあります!!!