基本的な使い方
約束3つの状態があります。、(進行中の)保留成就(成功した)と拒否(失敗した)、プロミスコンストラクタは、パラメータとして関数を受け取り、2つのパラメータは、保留中解決れる機能、関数解決していると拒否状態成就に、不可逆的変化に保留状態のステータスを拒否される機能を拒否。これら2つの関数の関数のパラメータは、コールバック関数に渡されます
constの約束=新しい約束(機能(解決、拒否){
// ...いくつかのコード
(/ *异步操作成功* /){もし
解決(値);
}他{
(エラー)を拒否;
}
});
promise.then((値)=> {
にconsole.log(値)
}、(エラー)=> {
にconsole.log(エラー)
})
その後、方法
プロミスインスタンス生成は、各コールバックメソッドで指定され、次いで分解状態及び状態を拒否することができた後に、最初の状態はpending->満たさコールバックであり、第二はpending->解決コールバックです。
なぜそれを呼び出すために連鎖することができますか?その理由は、オブジェクトが、メソッドによって返された約束なので、バックはその後、()メソッドを使用し続けることができるということです。
注意を払う必要がある場合は、次の文を理解することに焦点を当て:
。コールバックから返された値が自動的にAの約束を解決するonFulfilledや意志に包まれた機能をonRejected
、値を()2つのパラメータは自動的にパッケージ化される関数の戻りそれは約束で解決されました。(.thenに意味や.catchアウトの値を返し、それがフォームの解決(値)に包装又は.then .catchコールバックは、新しいターゲットプロミスに直接返すことができるの背後に通過するが、この別の方法は、(約約束の決意のうち返すことになるこの状態に制御)、または拒否することができます())
コード1:
$ HTTP({
メソッド: 'GET'、
URL: 'https://www.runoob.com/try/angularjs/data/sites.php1'
})。次に、(関数successCallback(DATA_1){
$ scope.res = DATA_1 ;
$ scope.names = data_1.data.sites;
戻りDATA_1;
}関数(err_1){
にconsole.log( "err_1"、err_1);
戻りerr_1;
。})を(関数(DATA_2){
にconsole.log( "DATA_2"、DATA_2)
}、関数(err_2){
にconsole.log( "err_2 ---->"、err_2);
。})キャッチ(関数(理由){
にconsole.log( "ERR ----- - >」、理由);
});
注:$ HTTPが約束オブジェクトを返します。
結果は以下の通りであります:
解決済み>成功コールバック関数(なぜ)、そしてその理由は、それが成功または失敗のコールバックコールバックであるかどうか、コールバック関数で、その戻り値は、オブジェクトの約束にパッケージ化されます-ネットワーク要求404>コールバックメソッドのerr_1を失敗しました次の成功したコールバックメソッドに渡される処理機能は、その後、中に入ります。
コード2:
Promise.resolve()
.then(()=> {
新たなエラーを返す( 'エラー!')
})
.then((RES)=> {
にconsole.log( 'を'、RES)
})
.catch ((ERR)=> {
にconsole.log( 'キャッチ'、ERR)
})
結果は次のとおりです。
その後:エラー:エラー!!!
Promise.resolve.thenで(...)
で...
その理由は次のとおりです:オブジェクトがエラーをスローし、エラーを返しませんが、解決に処理することにより、それは、変更のいずれかに必要.catch以降のキャプチャができません.thenまたは.catch
1.return Promise.reject(新しいエラー( 'エラー!!!'))
2.throw新しいエラー( 'エラー!!!')
キャッチ方法
Promise.prototype.catchは、エラーが発生したときにコールバック関数を指定するために、.then(NULL、拒絶)糖衣構文です。
方法はいずれも拒否1.then 2番目のコールバックの失敗は、キャッチ方法を入力します。その後、第2の方法は失敗したがある場合は
、コールバックを、後者はキャッチメソッドに行かなくても、拒否関数を入力しません。
$ HTTP({
メソッド: 'GET'、
URL: 'https://www.runoob.com/try/angularjs/data/sites.php'
})。次に、(関数successCallback(DATA_1){
$ scope.res = DATA_1 ;
$ scope.names = data_1.data.sites;
戻りDATA_1;
}関数(err_1){
にconsole.log( "err_1"、err_1);
戻りerr_1;
。})キャッチ(関数(理由){
にconsole.log( "ERR ------->"、理由);
});
結果:
ない2番目のコールバックがあれば、それはキャッチメソッドを入力します。
小さな質問:キャッチメソッドは、背後.then()でそれを受け取るその成功のコールバックで値を返しますか?答えはイエス、キャッチは、戻り値は出て解決されるバック.thenを()、参照するには成功せずに作られています。
注:常にキャッチ法を使用し、方法(即ち、第2のパラメータ)コールバック関数た状態を拒否定義しません。第二の理由は、文言が、その後文言(のtry / catch)を同期させるためにも近い実行エラーの以前の方法をキャプチャすることができますが、ということです
バート//
約束
.then(機能(データ){
//成功、タグ1.エラーは、ここでのコードでスローされた場合、この障害コールバック関数がキャプチャではありません。
}、機能(ERR){
/ /エラー
});
//良い
プロミス
.then(関数(データ){// CB
//成功
})
.catch(関数(ERR){
//エラー
})。
それは次のとおりです。コードのうち「マーク1」はエラーをスローした場合、後者の失敗したコールバック関数は、目に見えない(そして、目に見えないで捕捉されているオブジェクト自体を投げキャッチエラーにのみ約束)を取得することですが、唯一のキャプチャの隣に失敗したコールバック関数(すなわち、キャッチ)によります。
例:
Promise.resolve()
.then(関数成功(RES){
新しいエラー( 'エラー')投げる
}、関数FAIL1(E){
console.error( 'FAIL1:'、E)
})
.catch(関数FAIL2(E ){
console.error( 'FAIL2:'、E)
})
結果:
FAIL2:エラー:エラー
成功で(...)
で...
.then最初の処理の関数が成功し、第二の方法は、エラーの関数であり、2つのパラメータを受信することができます。2番目の引数は、彼らは警告を使用.then .catch簡単な文言は次のとおりです。.then 2番目のエラー処理関数は、スローの最初の治療成功の誤差関数をキャッチし、フォローアップすることはできません。キャッチミスあなたがキャプチャすることができます前に、
以下のコードは次のようになります
Promise.resolve()
.then(関数success1(RES){
新しいエラー( 'エラー')を投げる
}、関数FAIL1(E){
console.error( 'FAIL1:'、E)
})
.then(関数success2(RES ){
}、関数FAIL2(E){
console.error( 'FAIL2:'、E)
})