Promise解決多層非同期呼び出し
2355 ワード
概念
ES 6原生はPromiseの対象を提供しています.
Promiseとは、相手が非同期操作のメッセージを伝えることです.これは、ある将来結果が分かるイベント(通常は非同期的な動作)を表し、このイベントは、統一したAPIを提供し、さらなる処理に供される.
Promiseオブジェクトには以下の2つの特徴があります.
(1)対象の状態は外部の影響を受けない.Promiseオブジェクトは非同期操作を表しています.Pending(進行中)、Resoloved(完了しました.Fulfilledとも言います.)とRejeced(失敗しました.)の3つの状態があります.非同期操作の結果のみ、現在の状態はどの状態かを決定できます.他の操作はこの状態を変えることができません.これもPromiseという名前の由来ですが、英語では「承諾」という意味で、他の手段は変えられないという意味です.
(2)一旦状態が変わったら、二度と変わりません.いつでもこの結果が得られます.Promiseオブジェクトの状態が変わるのは、PendingからReolvedに変化することとPendingからRejectiedに変化することしかできません.この二つの状況が発生すれば、状態が固まり、これ以上変わることなく、ずっとこの結果を維持します.変更が発生したとしても、Promiseオブジェクトに対してコールバック関数を追加すると、すぐにこの結果が得られます.イベントとは全く違って、イベントの特徴は、それを見逃してしまったら、また傍聴しても結果が得られないということです.
Promiseオブジェクトがあると、非同期動作の流れを同期させて表現でき、入れ子の回転関数が回避されます.また、Promiseオブジェクトは、非同期動作を制御することが容易になるように、統一されたインターフェースを提供する.
Promiseにもいくつかの欠点があります.まず、Promiseをキャンセルすることができません.新築したらすぐ実行します.途中でキャンセルできません.次に、コールバック関数を設定しないと、Promise内部で投げられたエラーは外部に反応しません.第三に、Pendingの状態では、どの段階に進行しているかが分かりません.
Promiseコンストラクタはパラメータとして関数を受け入れ,この関数の二つのパラメータはそれぞれreolve法とreject法である.
非同期操作が成功すれば、レシオ方式でPromiseオブジェクトの状態を「未完成」から「成功」に変えます.
非同期操作が失敗したら、プロジェクト方法でPromiseオブジェクトの状態を「未完成」から「失敗」に変更します.
具体的なコードは以下の通りです
私たちは0 1 2 3を印刷してデモします.
2級であれば、そのプロミの対象は次の通りです.
マルチレベルのアプリケーションであれば、複数のプロミスオブジェクトが繰り返し呼び出される必要があります.具体的なコードは以下の通りです.
ES 6原生はPromiseの対象を提供しています.
Promiseとは、相手が非同期操作のメッセージを伝えることです.これは、ある将来結果が分かるイベント(通常は非同期的な動作)を表し、このイベントは、統一したAPIを提供し、さらなる処理に供される.
Promiseオブジェクトには以下の2つの特徴があります.
(1)対象の状態は外部の影響を受けない.Promiseオブジェクトは非同期操作を表しています.Pending(進行中)、Resoloved(完了しました.Fulfilledとも言います.)とRejeced(失敗しました.)の3つの状態があります.非同期操作の結果のみ、現在の状態はどの状態かを決定できます.他の操作はこの状態を変えることができません.これもPromiseという名前の由来ですが、英語では「承諾」という意味で、他の手段は変えられないという意味です.
(2)一旦状態が変わったら、二度と変わりません.いつでもこの結果が得られます.Promiseオブジェクトの状態が変わるのは、PendingからReolvedに変化することとPendingからRejectiedに変化することしかできません.この二つの状況が発生すれば、状態が固まり、これ以上変わることなく、ずっとこの結果を維持します.変更が発生したとしても、Promiseオブジェクトに対してコールバック関数を追加すると、すぐにこの結果が得られます.イベントとは全く違って、イベントの特徴は、それを見逃してしまったら、また傍聴しても結果が得られないということです.
Promiseオブジェクトがあると、非同期動作の流れを同期させて表現でき、入れ子の回転関数が回避されます.また、Promiseオブジェクトは、非同期動作を制御することが容易になるように、統一されたインターフェースを提供する.
Promiseにもいくつかの欠点があります.まず、Promiseをキャンセルすることができません.新築したらすぐ実行します.途中でキャンセルできません.次に、コールバック関数を設定しないと、Promise内部で投げられたエラーは外部に反応しません.第三に、Pendingの状態では、どの段階に進行しているかが分かりません.
Promiseコンストラクタはパラメータとして関数を受け入れ,この関数の二つのパラメータはそれぞれreolve法とreject法である.
非同期操作が成功すれば、レシオ方式でPromiseオブジェクトの状態を「未完成」から「成功」に変えます.
非同期操作が失敗したら、プロジェクト方法でPromiseオブジェクトの状態を「未完成」から「失敗」に変更します.
具体的なコードは以下の通りです
私たちは0 1 2 3を印刷してデモします.
2級であれば、そのプロミの対象は次の通りです.
new Promise((resolve, reject) => {
console.log(0)
setTimeout(() => {
console.log(1)
resolve()
}, 2000)
}).then(() => {
console.log(2)
})
0(2秒後)1 2を順次プリントアウトします.マルチレベルのアプリケーションであれば、複数のプロミスオブジェクトが繰り返し呼び出される必要があります.具体的なコードは以下の通りです.
new Promise((resolve, reject) => {
console.log(0)
setTimeout(() => {
console.log(1)
resolve()
}, 2000)
}).then(() => {
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log(2)
resolve()
}, 2000)
})
}).then(() => {
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log(3)
resolve()
}, 2000)
})
}).then(() => {
console.log(4)
})
0(2秒後)1(2秒後)2(2秒後)3を順次プリントアウトします.