非同期、待つと競合しないと約束、それは約束の延長であり
1、次いでだけスプリット・コールバック(以前callbakも関数であるが、アセンブリの背面を分割することができます)
機能WaitHandle(){ VAR DTD .Deferred = $(); //は、繰延オブジェクトの作成 VAR待機= 機能(DTD){ //は渡すオブジェクトが延期される必要が VaRのタスクを= 関数(){ はconsole.log(「実行完了' ); dtd.resolve(); // 非同期タスクのための完了 // dtd.reject(); //非同期タスクが失敗を示すか、エラー } のsetTimeout(タスク 2000 ); 戻り dtd.promise(); // Deferredを戻って、直接ではなくバックの約束、 } // この値が返されなければならないことに注意してください 返す待機(DTD)を; } VAR = W waitHandle()。 w.then(関数(){ にconsole.log( 'OK1' ) }、関数(){ にconsole.log( 'ERROR1' ) })。次に、(関数(){ にconsole.log( 'OK2' ) }、関数(){ にconsole.log( 'ERROR2' ); })
2、aysnc /それは(同じ文言と実行のための)最も直接的な同期表現で待ちます
インポート「バベル-ポリフィル」; 関数loadImg(SRC){ CONST約束 = 新しいプロミス(関数(決意、リジェクト){ VARの IMG =のdocument.createElement( 'IMG' ); img.onload = 関数(){ 解決(IMG); } img.onerror = 関数(){ リジェクト(); } img.src = SRC; }) 戻り約束。 } CONST負荷 =非同期関数(){ CONST結果1= loadImg( 'xxx.png'を待ちます)。 console.log(結果1)。 CONSTは結果2 =はloadImg( 'yyy.png'を待ちます)。 console.log(結果2)。 } 負荷()。
使い方
1、のawaitの使用、関数は非同期に識別されなければなりません
2、待つ続く例は、約束であります
3、バベル-ポリフィルを必要とする(互換性の意味)
NPM I --save-devのバベル、ポリフィル
概要
1、約束、そして競合との約束はありません
2、言葉遣いが完全に同期され、コールバック機能なし
3、しかし:シングルスレッド、非同期の性質を変更しないJS