「.NET 開発基盤部会 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
目次 †
概要 †
- Promiseではコールバックを関数に渡すかわりに、
コールバックを付属させたPromiseオブジェクトをリターンする。
- これにより、
- インターフェイス、処理の書き方を統一することができ、
- 実行と完了に遅延がある処理をうまい具合に扱うことができる。
コールバック地獄の解決 †
- JavaScriptで非同期処理を順次実行する場合、
- 同期メソッド上で同期メソッドを順番に呼び出すのではなく、
- コールバックから再びコールバック付き非同期メソッドを呼び出す必要があるため、
ネストが深くなりコードが読み難くなるということがある。
(ただし、これは、無名関数デリゲートを使用した場合の話)
- しかし、Promiseを使用することで、この問題を解決することができる。
(シーケンシャルではないがメソッド・チェーンで順番に呼び出すことができる)
Promiseの簡潔な仕組みの解説 †
Promiseオブジェクト †
組み込みクラス。
非同期処理の「実装」方法 †
以下のようにPromiseオブジェクトを利用して非同期処理を実装する。
- 非同期処理関数はPromiseオブジェクトを返すように実装する。
- Promiseオブジェクトは、非同期処理関数の中で以下のように生成される。
- Promiseオブジェクトのコンストラクタに非同期処理の
本体となる非同期処理関数を(基本的に無名関数として)渡す。
- この「本体となる非同期処理関数」は、
- 成功と失敗のコールバックを受け取る。
- そして、ajaxなどの非同期処理を実行して、
- 非同期処理の結果を受けて、
成功時:成功のコールバックを実行する。
失敗時:失敗のコールバックを実行する。
非同期処理の「実行」方法 †
- 戻り値のPromiseオブジェクトのthenメソッドに引数に、
成功と失敗のコールバックを指定してチェーンする。
比較 †
従来型 †
doSomethingの中で、successかfailureのコールバックを呼ぶ。
function successCallback(result) {
console.log("It succeeded with " + result);
}
function failureCallback(error) {
console.log("It failed with " + error);
}
doSomething(successCallback, failureCallback);
Promise型 †
Promiseを返し、thenやcatchのメソッド・チェーンでコールバックを処理。
参考 †
MDN †
Qiita †
HTML5Experts.jp †