JavaScriptの中のpromiseは使用します.
3535 ワード
プロモーション開始
Promiseは非同期プログラムの解決策であり、Promiseはオブジェクトと考えられ、非同期操作のメッセージを得ることができる.Promiseは統一APIを提供しています.様々な非同期操作は同じ方法で処理できます.二つの特徴があります.オブジェクトの状態は外部の影響を受けない.Promiseオブジェクトは非同期操作を表しています.3つの状態があります.pending(進行中)、fulfilled(成功しました)、rejectied(失敗しました).プロミセが実行した結果だけが現在の状態に影響を与えます.非同期操作でも大丈夫です. いったん状態が変化すれば、この結果はいつでも得られます.Promiseオブジェクトの状態が変わるのは、pendingからfulfilledになることと、pendingからrejectiedになることだけです. 基本的な使い方
ES 6はPromiseオブジェクトがPromiseのインスタンスを生成するためのコンストラクタであると規定しています.
thenメソッド
then方法はプロトタイプオブジェクトPromise.prototypeに定義されています.その役割はPromiseの例に状態変化を加えた場合のコールバック関数である.then法の最初のパラメータはreolved状態のコールバック関数であり,第二のパラメータ(オプション)はrejeced状態のコールバック関数である.then方法は新しいPromiseの例を返します.したがって、チェーン式の書き方、すなわち、then方法の後に別のthen方法を呼び出すことができる.
catchの方法
Promise.prototype.catch方法は.then(null,rejection)の別名で、エラーが発生した場合のコールバック関数を指定します.非同期操作でエラーが発生するとステータスがrejectになり、catchメソッドで指定されたコールバック関数を呼び出してこのエラーを処理します.また、thenメソッドで指定されたコールバック関数は、運転中にエラーが発生した場合、catch方法で捕獲されます.
promise.resove理解
Promise.resoveは唯一promiseを完成状態に変換する操作であり、Promise.resove方法のパラメータは四つのケースに分けられていると言えます.パラメータはpromiseの例であり、パラメータがPromiseの例であれば、Promise.resoveは何も修正せずにそのままこのインスタンスに戻ります.これは前にも話しましたが、プロミセのresoveパラメータバンドがプロミスである場合、プロミセは廃棄されます.この新しいプロミスの状態で に取って代わられます.パラメータは、thenableオブジェクトthenableオブジェクトとは、thenメソッドを有するオブジェクトを指し、Promise.resove方法は、このオブジェクトをPromiseオブジェクトに変換し、直ちにthenableオブジェクトのthen方法を実行する. パラメータは、then方法を有するオブジェクトではなく、または単にオブジェクトではない場合、パラメータが元の値であるか、またはthen方法を持たないオブジェクトである場合、Promise.resove方法は、新しいPromiseオブジェクトに戻り、状態はresoveである. は、任意のパラメータPromise.resove方法を持たず、起動時にパラメータを持たずに、そのままresoved状態のPromiseオブジェクトに戻ることができます. promise.reject理解
Promise.reject(reason)方法はまた、rejectの状態である新しいPromiseのインスタンスを返す.なお、Promise.reject()メソッドのパラメータは、そのままrejectの理由として、後続の方法のパラメータとなります.この点はPromise.resove方法と一致しない.
その他 done()Promiseオブジェクトのレプリカチェーンは、then方法またはcatch方法で終止符を打っても、最後の方法が間違っていると捉えられない可能性があります.したがって、我々は常にフィードバックチェーンの終端にあるdone方法を提供し、任意の発生可能なエラーをスローすることを保証します. done()finallyメソッドは、Promiseオブジェクトの最後の状態に関係なく実行される動作を指定するために使用されます.それはdone法との最大の違いで、パラメータとして普通のコールバック関数を受け入れています.この関数はどうしても実行しなければなりません.
Promiseは非同期プログラムの解決策であり、Promiseはオブジェクトと考えられ、非同期操作のメッセージを得ることができる.Promiseは統一APIを提供しています.様々な非同期操作は同じ方法で処理できます.二つの特徴があります.
ES 6はPromiseオブジェクトがPromiseのインスタンスを生成するためのコンストラクタであると規定しています.
new Promise(
/* executor */
function(resolve, reject) {...}
);
Promiseコンストラクタはパラメータとして関数を受け入れ,この関数の二つのパラメータはそれぞれreolveとrejectである.それらは2つの関数で、JavaScriptエンジンによって提供されます.自分で配置する必要はありません.例を見ますlet promise = new Promise(function(resolve, reject) {
console.log('Promise');
resolve();
});
promise.then(function() {
console.log('resolved.');
});
console.log('Hi!');
// Promise
// Hi!
// resolved
new promiseの場合、すぐにプロミゼコンストラクタのパラメータfunctionを実行します.つまり、reolve、rejectの2つの方法を含む関数はすぐに実行されます.上記のコードの中でPromiseは新規作成後すぐ実行しますので、まず出力するのはPromiseです.その後、thenメソッドで指定されたコールバック関数は、現在のスクリプトの全同期タスクで実行されるので、最後に出力されます.注意:1.promiseのパラメータ関数の中で、reolve、rejectの二つの関数の中のいずれかがパラメータを持っていてもpromiseであれば、この元のpromiseの状態はパラメータの中のpromiseの状態によって決まります.2.revove、rejectはreturnのように関数の運行を終了したいとは思いません.thenメソッド
then方法はプロトタイプオブジェクトPromise.prototypeに定義されています.その役割はPromiseの例に状態変化を加えた場合のコールバック関数である.then法の最初のパラメータはreolved状態のコールバック関数であり,第二のパラメータ(オプション)はrejeced状態のコールバック関数である.then方法は新しいPromiseの例を返します.したがって、チェーン式の書き方、すなわち、then方法の後に別のthen方法を呼び出すことができる.
// getJSON promise
getJSON("/posts.json").then(function(json) {
return json.post;
}).then(function(post) {
// ...
});
多くの場合、thenの中では人工的にいくつかの非同期操作を書いています.このようによくチェーン呼び出しができますが、人為的な非同期操作でなくても、JavaScriptは自動的にthenの戻り値をpromiseの例にカプセル化して、then無限フィードバックを使用しています.catchの方法
Promise.prototype.catch方法は.then(null,rejection)の別名で、エラーが発生した場合のコールバック関数を指定します.非同期操作でエラーが発生するとステータスがrejectになり、catchメソッドで指定されたコールバック関数を呼び出してこのエラーを処理します.また、thenメソッドで指定されたコールバック関数は、運転中にエラーが発生した場合、catch方法で捕獲されます.
//getJSON promise
getJSON('/posts.json').then(function(posts) {
// ...
}).catch(function(error) {
// getJSON
console.log(' !', error);
});
比較的に推奨されている書き方は、まずthenを使ってpromiseにresoliveのフィードバックを追加し、その後catchを使ってリンク上のrejectまたは異常をキャプチャすることです.promise.resove理解
Promise.resoveは唯一promiseを完成状態に変換する操作であり、Promise.resove方法のパラメータは四つのケースに分けられていると言えます.
Promise.reject(reason)方法はまた、rejectの状態である新しいPromiseのインスタンスを返す.なお、Promise.reject()メソッドのパラメータは、そのままrejectの理由として、後続の方法のパラメータとなります.この点はPromise.resove方法と一致しない.
その他