例:私はウェブサイトの「新しいアカウントを作成する」ページにいます。アカウントを作成する前に、私は指定された電子メールが迷惑メール(つまり、[email protected])かどうかを判断する必要があります。2つの約束をトリガし、条件付きで1つを待つ方法
function emailIsValid(): JQueryPromise<boolean> { ... }
function getPotentialDuplicates(): JQueryPromise<IDupResults> { ... }
:私はまた、代わりに新しいもの(多分アドレスがすでに存在している、など)これらはように定義されているのに使用されなければならない可能アカウントのリストを返すバック、アカウントがすでに存在するかどうかを決定する必要があります仮説的に、getPotentialDuplicates
コールでは、超低速の実際に古いデータベースをチェックして、完了までに3〜5秒かかりますが、emailIsValid
は通常4秒かかります。したがって、私は、この結果は、このアクションツリーによって定義されていると同時に、これらの呼び出しの両方をキックオフしたいと思います:
- の場合 - 最初
getPotentialDuplicates
リターン:- 待ち
emailIsValid
のためならば - を返すために、 - 電子メールは有効です。
- 場合 - 何DUPのが発見されていない、そうで
- アカウントを作成する - ユーザーにショーDUPの。エルス
- - まず
emailIsValid
リターン - エルス
- 待ち
- dupResultsを無視し、 "メールが無効です" と表示さ: - 電子メールが有効な場合
- を:
getPotentialDuplicates
ため
- 待ち
- ダブが見つからない場合、アカウントの作成
- Else - ユーザーにダップを表示します。
- から
getPotentialDuplicates
待つと、「メールが無効である」表示しない
- を:
現在、私はwhen.done
を使用していますが、これは仕上げの両方を待ちます。これを定義する簡単な方法はありますか?
これを行うことができるネイティブなPromiseやjQueryの実装には何かがあるかどうかはわかりません。ブルーバード・プロミス・ライブラリーには、あなたが望むように思える「Promise.any'」(http://bluebirdjs.com/docs/api/promise.any.html)があります。 –
@MikeMcCaughanはPromiseの標準API定義のネイティブPromise実装ですか、それとも特定のライブラリですか? – Daryl
最近のバージョンのブラウザではPromiseオブジェクトがネイティブに実装され、[Promise/A +標準](https://promisesaplus.com/)に準拠しています。もちろん、同じ標準を実装しているライブラリと、[Q](https:// github。com/kriskowal/q)と前述の[bluebird](http://bluebirdjs.com/docs/getting-started.html)を参照してください。 1.5でのjQueryの実装は、「CommonJS Promises/A標準(http://wiki.commonjs.org/wiki/Promises/A)」に基づいています。 [jQuery](https://api.jquery.com/jQuery.Deferred/)を参照してください。 –