、約束組成
1、タスク:タスクを完了することを約束。
2結果:処理されたデータ。
3、状態:状態。
4、(キャッチに対応する)拒絶、満たします
5、ResolveCallback ErrorCallback約束ステータス解釈機能
6、解決:
約束の現在の状態を説明するために、すぐにバックオフ状態の実装、未完成状態の登録バックオフ機能を完了しました。
7、そして:約束戻って登録する前に、約束をリードした後、
二、promoseステートマシン:
満たす、リジェクト:状態変更機能、入力、プリアンブル、内部および外部の機能によって実行されてもよいです。
表面インターフェイスはタスクであり、複数のタスクの内部を通過があってもよいです。
ResolveCallback ErrorCallback:関数の出力状態を変化させ、続きます。
三、ライフサイクルの約束(例えば非同期)
1、promiseA非同期タスク機能を実行し、作成します。
図2は、次に約束を作成する中継ノード(promiseZ)を呼び出し、その後しばらくパッケージ(promiseX)構成とpromiseZ入力(満たす)(promiseA.resolve())promiseA.resolveCallbacksに送信されます[]。
3、promiseAタスクは、実行promiseA.fulfillは、約束を履行するためにpromiseA場合;
4、promiseA.fulfill後継関数呼び出し外側に透過状態、
5、resolveCallbackはpromiseXが最初に生成され、そしてその後のpromiseZがpromiseXの機能を果たすように登録し、実行。
6は、promiseXタスクが完了すると、実行はのpromiseZを満たす呼び出すpromiseX、resolveCallbackを果たします。
7、コミットメントの完了の状態をpromiseZ、後続の約束モジュールを呼び出します。
第四に、関数型プログラミング環境変数 - アナログステーション再帰関数の呼び出し
再帰呼び出しに対応する非同期プロシージャコールチェーンの約束構築プロセスの構築。
これは、逆鎖約束の実行再帰呼び出しの実行に対応します。
キーは、すべてのブロックや環境変数を把握する機能の構成と実装を明らかにすることです。
特定のブロックでは、その環境変数は、いくつかのモジュールの約束をまたがること。
環境変数のブロック:
1は、自己の機能表現を約束します。
図2に示すように、入力パラメータの関数。
3、ブロックで生成された環境変数
@discardableResult FUNC次いで、<U>(_次:@escaping((T) - >プロミス<U>)) - >プロミス<U> {
戻りプロミス<U> {満たす、でリジェクト
self.catch {(ERR)に
拒否(ERR)
} .resolve {もたらします
次の(結果).catch {(ERR)に
拒否(ERR)
} .then {(finalResult)で
果たす(finalResult)
}
}
}
}
グローバル関数や機能によって、環境変数、コールスタックを保存するには、通常の関数呼び出し。
環境変数のオブジェクトを保存するためのブロック毎;
第四に、非同期プログラミングモデル
?
五、promoie(タスク)機能
promiseA:非同期スタート機能機能、非同期の完了後に後継関数を呼び出し、約束を果たします。
promiseX:次に、入力の機能を果たし、そしてpromiseA promiseZプリアンブルの後継として、
約束のコンストラクタ(monand flatmapで変換)によって生成されます。
promiseZ:コンストラクタの責任とpromiseAを解決promiseAを通過するように、その梱包を果たすpromiseX、約束の背後に同じリレー。
promise.then環境変数としてpromiseZ。
六、約束のコンストラクタは、その後、機能パイプライン処理をバックオフ
@discardableResult FUNC次いで、<U>(_次:@escaping((T) - >プロミス<U>)) - >プロミス<U> {
戻りプロミス<U> {満たす、でリジェクト
self.catch {(ERR)に
拒否(ERR)
} .resolve {もたらします
次の(結果).catch {(ERR)に
拒否(ERR)
} .then {(finalResult)で
果たす(finalResult)
}
}
}
}
七、約束、flatMap
形質モナド[M [_] {
DEFユニット[A](A):M [A]
DEF flatMap [A、B](FA:M [A])(F:A => M [B]):M [B]
プロセスとしてのオブジェクトを構築するための約束、
唯一の変換:@escaping((T) - >約束<U>)の実行が完了すると、promiseZが構築されて考えられ;