プロミスカーディング
コンストラクタ、オブジェクトを作成するためのコミットメントは、オブジェクトは、主コミットメント非同期操作をカプセル化するために使用されます。
役割は:コールバックオリジナルの言葉遣いは、連鎖呼び出しを経由して、コールバック関数を実行する非同期操作を分離することができます。
(コールバック多層を防ぐ)
表面から、それは、コールバック関数への送信状態をタイムリーコールするように、状態を維持するための方法を約束層が書き込まコールバックが、本質的に、プロミス「状態」の本質である、簡略化することができます転送コールバック関数よりも簡単、そしてより柔軟な。
コミットメントが起動
正常に解決約束
拒否約束障害
コミットメントを取得したり、オブジェクトを作成するには1)
1プロミスは=せ新規新しい(プロミス関数{()解決し、拒否 2 }) 3。 4。 Resolveメソッド、オブジェクトが保留をコミットします- > 解決 5は、方法を拒否する、オブジェクトは、保留中のコミットされます- >拒否
2)コミットメント目標
Promise.prototype.then(successHandler [、のErrorHandler])
成功したコミットメントを実行successHandler
障害がときに実行されるときのErrorHandlerコミットメントを
、その後、一般的でないのErrorHandlerメソッドを追加し、しかしのErrorHandlerにキャッチ
戻り値現在のインスタンスのための約束
Promise.prototype.catch(のErrorHandler)
のErrorHandlerは約束どおり実行に失敗したときに
Promise.prototype.finally(ハンドラ)
ハンドラハンドラ関数が実行される方法に変更理由にかかわらず、状態コミットメントのオブジェクト
3)高度な特長
1.約束を。全て([P1、P2、... ])
コミットメントコミットメントターゲットに複数のオブジェクト、戻り値約束
約束
.then((結果)=> {
//すべてのコミットメントが解決されるコールバックのみ行わ
各コミットメントオブジェクトの結果は、構成値の配列戻り//
)}
.catch(()=> {
//コールバック関数へのコミットメントがある場合、オブジェクトが拒否された実行を
)}
あなたは、オープンモーダルボックスの後に、すべての顧客情報と注文情報をチェックアウトすると
2. Promise.race([P1、P2、 ...])
コミットメントコミットメントターゲットに複数のオブジェクト、戻り値プロミス
プロミス
.then((結果)=> {
//約束限りオブジェクトの状態が存在するように解決、コールバック関数が実行なる
)}
.catch(()=> {
拒否オブジェクトの状態が変化へのコミットメントがある//限り、それは、コールバックを実行する
})
3. Promise.resolve(V)
にvがコミットメントターゲットに変換され
Promise.rejected(V)4.
オブジェクトのコミットメントの拒否された状態を返すように
コード:
1 let $ = { 2 //使用回调 3 get({url,success,error}){ 4 let xhr = new XMLHttpRequest(); 5 //设置请求行 6 xhr.open("get",url); 7 //设置请求头,标明请求体传递方式 8 xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded"); 9 //设置返回值 10 xhr.responseType = "json"; 11 //设置请求体 12 xhr.send(); 13 //监听机制 14 xhr.onreadystatechange = function(){ 15 if(this.readyState === 4){ 16 if(this.status === 200){ 17 success(this.response); 18 }else{ 19 error(this); 20 } 21 } 22 } 23 }, 24 //使用promise承诺对象 25 get_promise(url){ 26 return new Promise(function(resolve,rejected){ 27 let xhr = new XMLHttpRequest(); 28 //设置请求行 29 xhr.open("get",url); 30 //设置请求头,标明请求体传递方式 31 xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded"); 32 //设置返回值 33 xhr.responseType = "json"; 34 //设置请求体 35 xhr.send(); 36 //监听机制 37 xhr.onreadystatechange = function(){ 38 if(this.readyState === 4){ 39 if(this.status === 200){ 40 //请求成功 41 resolve(this.response); 42 }else{ 43 //请求失败 44 rejected(this); 45 } 46 } 47 } 48 }) 49 } 50 } 51 $.get({ 52 url:"http://134.175.100.63:6677/customer/findAll", 53 success:function(response){ 54 console.log(response) 55 }, 56 error:function(xhr){ 57 console.log(xhr) 58 } 59 }) 60 61 $.get_promise( 62 "http://134.175.100.63:6677/customer/findAll" 63 ).then((response)=>{ 64 //当promise的状态由 pending -> resolved 65 console.log("顾客信息:",response); 66 }).catch((xhr)=>{ 67 //当promise的状态由 pengding -> rejected 68 console.log(xhr); 69 alert("异常") 70 }) 71 72