1.最初に断言約束は、約束をパラメータとして受信機能、クラスであり、この関数は二つのパラメータ、成功したコールバックの解決、拒否失敗したコールバック、入ってくるの新しいクラスを受け、この関数は直ちに実行されます
1 クラスプロミス{ 2 コンストラクタ(タスク){ 3 LETの解決=()=>を{ 4 5 } 6 LET拒否=()=> { 7 8 } 9 タスク(決意、リジェクト) 10 } 11 }
2.基本的な状態を解決するため、約束は拒否され、満たさ保留中の3つの状態が、持っています
初期状態を保留、首尾よく満たさ状態が拒否され失敗した状態に変換することができます変換することができます
状態に成功満たされていないが、他の状態に変換され、値の戻り値を持っています
スイッチの故障を拒否することができない状態と他の状態は、エラー理由値を返しました
タスクが実行されている場合は直接誤差関数を拒否
1 クラスPromise2 { 2 コンストラクタ(タスク){ 3 本 .status = '保留中の[ 4 本 .VALUE = 不定 5 本 .reason = 不定 6 LETの解決=値=> { 7 場合(この === .status'ペンディング[ ){ 8 この .statusは= '満たさ' 9 この .VALUE = 値 10 } 11 } 12 LET拒否=理由=> { 13 であれば(この.status === 'ペンディング' ){ 14 この .statusは= '拒否' 15 この .reason = 理由を 16 } 17 } 18 のtry { 19 タスク(決意、リジェクト) 20 } キャッチ(ERR){ 21 リジェクト(ERR) 22 } 23 } 24 }
3.then方法
そして、この方法の約束があり、2つのパラメータは、onRejected、失敗の成功成功失敗の理由値onFulfilledがあります
ステータス値が満たさ、着信onFulfilled this.value。ステータス値がonRejectedを行う機能であり、拒否場合着信this.reasonの機能を実行したとき
onFulfilledは後に成就し、拒否され、最初に呼び出される関数をonRejectedとパラメータはthis.value this.reasonある場合
1 クラスPromise2 { 2 コンストラクタ(タスク){ 3 本 .status = '保留中の[ 4 本 .VALUE = 不定 5 本 .reason = 不定 6 LETの解決=値=> { 7 場合(この === .status'ペンディング[ ){ 8 この .statusは= '満たさ' 9 この .VALUE = 値 10 } 11 } 12 LET拒否=理由=> { 13 であれば(この.status === 'ペンディング' ){ 14 この .statusは= '拒否' 15 この .reason = 理由を 16 } 17 } 18 のtry { 19 タスク(決意、リジェクト) 20 } キャッチ(ERR){ 21 リジェクト(ERR) 22 } 23 } 24 、次いで(onFulfilled、onRejected){ 25 であれば(この .status === '満たさ' ){ 26 onFulfilled(この.VALUE) 27 } 28 場合(これ .status === 'は拒否' ){ 29 onRejected(この.reason) 30 } 31 } 32 }
4.非同期は問題を解決します
解決するかは時間を拒否するときに私たちは、その後に追いつい成功と失敗を機能させる必要がある、ステータスが静止状態を保留しているときに、上記基本的には同期コードのいくつかを解決することができますが、解決はでのsetTimeoutに行ったときに呼び出すために
パブリッシュ・サブスクライブパターンと同様の機能を最初に一緒に存在し、その後、成功と失敗のすべての機能をより機能があってもよい2つの配列の存在下にあります