約束和非同期/のawait

1、約束のオブジェクト

(進行中の)保留、成就(成功)と拒否(失敗):約束のオブジェクトは、3つの状態があります。満たされ、拒否になるために保留中の変更から保留から:、2つだけの可能性を、オブジェクトの状態を変更することを約束します。

CONST約束= 新しいプロミス(関数リジェクト(解決){
   場合(){ 
    解決(値); 
  } そうでなければ{ 
    エラー(拒否); 
  } 
})。

約束のコンストラクタは、パラメータとしての機能を受け入れ、二つのパラメータの機能は、展開する必要はありません、彼らはJavaScriptエンジンにより提供される二つの機能です、決意していると拒否します。

関数は「成功」を「未完」約束からオブジェクトの状態が解決されるデータは、出力パラメータとして渡すことができる(すなわち、保留中から解決になります)。機能を拒否(すなわち、拒否保留中から変更)「失敗」するために特定のエラーメッセージはまた、出力パラメータとして渡すことができる「未完」約束からオブジェクトの状態を達成することです。

新しい約束をすぐに実行した後、層に包まれているので外約束の関数とすることができます。

関数のタイムアウト(ミリ秒){
   戻り 、新たな約束((決意、リジェクト)=> { 
    たsetTimeout(決意は、MSは、 '行わ' ); 
  }); 
} 

タイムアウト( 100).then((値)=> { 
  にconsole.log(値); 
});

 

次いで1.1、()メソッド

約束の例としては、オブジェクトではなく、機能しています。約束のインスタンス生成したら、状態によってコールバック関数解決の状態を指定してメソッドを拒否することができます。

約束=せて新たな(プロミス関数)、(決意を拒否{
   場合(){ 
    解決(値); 
  } そうでなければ{ 
    エラー(拒否); 
  } 
})。

promise.then(関数(値){ 
  にconsole.log(値)
}、関数(誤差){ 
  にconsole.log(エラー)
})。

次いで、この方法は、引数として、2つのコールバック関数を受け入れることができます。最初のコールバック関数が約束オブジェクトの状態が解消になると、約束オブジェクトの状態が拒否されてしまうときに、第2のコールバック関数が呼び出され、第二の機能はオプションであり、提供する必要はないと呼ばれます。どちらの関数は、オブジェクト約束の値がパラメータとして来て受け入れます。

 

書き込み鎖1.2、次いで()メソッド

次に、本方法は、すなわち、次に再び本方法は、別のメソッドを呼び出して、チェーンを使用して記述することができ、新たな約束のインスタンスを返します。

1.2.1、決定された値を返す、方法

その後、()メソッド内には、のリターンをすぐに満たさ状態に設定し、特定の「値」、そして今回は、この正確な値は、約束の新しい既定のインスタンスを渡されると約束の一例を返すことができますパラメータとして渡された値は、この方法では、その後の使用のために、その後、方法を解決します。

P1 =せて新しい新しいプロミス((解決、拒否)=> { 
    解決( 'AAA' 
})
p1.then((データ) => { 
    データ + =データ'BBB'
     の戻りデータ  // この場合、データはとして解決されますパラメータアウト渡さ 
次いで((ヴァル))} => { 
    にconsole.log(ヴァル + '成功事例の' ); 
}、(ERR) => { 
    にconsole.log(ERR + 'エラー' ); 
})

// 出力: AAABBBのテキスト入力欄

 

1.2.1は、この方法は、インスタンス約束を返します

メソッドは、オブジェクトまたは約束の内側に返した場合、コールバック関数の後に、この時間は、それはオブジェクトの状態変化の約束を待つことになる、と呼ばれます。

// 最初の非同期タスク
関数A(){
   戻り 新しい新しい(プロミス機能{)、(決意を拒否
     解決( "機能A" ;)
  }); 
} 
// 第二非同期タスク
関数B(DA​​TA_A)を{
   返す 新しい新プロミス(関数(解決、拒否){ 
     にconsole.log(DATA_A); 
     (解決 "機能B" ); 
  }); 
} 

// 連続コール 
。A()を(関数(データ){   
     戻り B(データ)       / / この場合、この方法は、オブジェクト内部の約束を返し、後者は次に約束が呼び出されるオブジェクトの状態が変化するのを待ちます
。})を((データ)=> { 
    にconsole.log(データ + '成功事例の' 
}、(ERR) => { 
    (ERRにconsole.log + '拒否' 
})
// 出力:関数のテキスト入力欄関数B

状態は、2番目のコールバック関数が呼び出された拒否に変更された場合、そのオブジェクトの状態の変化を機能約束内部最後上記関数の前で待っている、解決になった場合、コールバック関数は、最初に呼び出されます。

1.2.1、その後、この方法は、内部に戻りません

この方法は非常に戻って、データを返さない場合、あなたは以前のデータにアクセスすることができませんが、その後、後者の方法は、まだ実行することができます。

// 最初の非同期タスク
関数A(){
   戻り 新しい新しい(プロミス機能{)、(決意を拒否
     解決( "機能A" ;)
  }); 
} 
// 第二非同期タスク
関数B(DA​​TA_A)を{
   返す 新しい新プロミス(関数(解決、拒否){ 
     にconsole.log(DATA_A); 
     解決( "機能B" ); 
  }); 
} 

。A()を(関数(データ){    
    にconsole.log(データ)     // 戻りません 
} ).then((データ)=> { 
    にconsole.log(データ + '成功事例の'
}、(ERR) => { 
    にconsole.log(ERR + '拒否' 
})
// 出力:関数未定義の成功事例の

 

1.3、キャッチ()メソッド

Promise.prototype.catch方法.then(null, rejection)または.then(undefined, rejection)エラーが発生した指定されたコールバック関数の別名。

 

おすすめ

転載: www.cnblogs.com/wenxuehai/p/11306245.html