問題タブ [es6-promise]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - promise を正しく使用して 2 つの異なる結果を返す方法
ES6 を使用して JavaScript で Promises を使用して、オブジェクトから 2 つのメソッドからデータを返そうとしています。これは、本番環境ではエンドポイントを呼び出します。
私のMovieApi
オブジェクトには、最初に映画のリストを返し、次にIDごとに1つの映画を返すという2つの約束があります。コールバック地獄を避けるためにプロミスを使いたい。Arentがコールバックのみを約束するという質問への回答としてリストされているアプローチに従っていますが、エラーがあるため、明らかに間違っていますfindMovie is not defined
.then()
このように映画の約束を呼び出します...しかし、2番目のメソッドを呼び出そうとするとエラーが発生します
ここでコールバック地獄から抜け出す方法はありますか、それとも、コールバックを使用している場合と本質的に同じ可読性の問題を抱えて、MovieApi オブジェクトをもう一度呼び出す必要があるのでしょうか。
javascript - すべての then-ables で reject コールバックを使用している場合でも、最後に常に catch() が必要ですか?
最後にキャッチを配置していますが、少なくとも特定のインスタンスで空のオブジェクトを返しています。知らないことにはキャッチが必要ですか、それとも私を台無しにするだけですか?
違いますか?.then(resolve, reject)
または、すべての親チェーンされた then-ablesのメソッドのすべての使用法でエラー/拒否ハンドラーを使用している場合でも、何らかの用途がありますか?
編集:より良いコード例、私は願っています。私はまだ命名にある種のアンチパターンを使用している可能性があると思います.rejectMessage
例えば、それはjqXhrオブジェクトですよね?
だから多分私はそれらに正確にその名前を付ける必要がありますか?つまりjqXhr
?ちなみに、then()
エラーがあった場合、 each 内のその場で拒否するのが好きな理由は、この方法で個々の呼び出しを大量にログに記録できるためです。特に問題があった場合、その方法ではありません何かを追跡するために。できるので、マイクロロギング。
Promise は、このようにデバッグの世界を開くのに役立っています。
これが私が試した3つの例です。私は方法 1 と方法 2 を好みますが、私が約束の地で出発した方法 3 に戻ることは決してありません。
onready
また、これを別のバックアップとしてどこかで実行します。
エラー例の編集
javascript - Parse JavaScript SDK で他の promise 実装を使用できますか?
私は、JQuery 互換の promise を使用して Parse を参照したことがあることに懸念を抱いています。jQueryの promise を使用すると、消費者が promise の状態を変更できることを読んだことがあります。Promises/A+に準拠していることが知られている別の promise 実装( ECMAScript 6 実装、またはBluebirdなど) を Parse JavaScript SDK で使用することは可能ですか?
通常、これは不可能だと思いますが、Parse JavaScript SDK の v1.4.2 では、Parse.Promise の実装でプロパティ「_isPromisesAPlusCompliant」が false として定義され、ライブラリ内のさまざまな関数でチェックされます。
注: この質問は、もともとParse Developers groupで行われましたが、回答がありませんでした。
javascript - すべての内部並行プロミスが解決または拒否されたら、プロミスを解決します
Promise.all
1 つ以上の約束が拒否またはエラーをスローした場合でも、約束を同時に解決し続けるようなものを探しています。各リクエストは別のリクエストに依存しません。
私が望むものに近い - コメントを見てください
私はPromise.all
fetchRequest の約束を解決するだけで一緒に使用することに成功しました。これにより、期待される結果(結果とundefined
の配列)が得られますが、これは間違った方法だと思います。また、スローされたエラーを使用できなくなります。
機能しますが、解決の間違った使用のように感じます
ネイティブ es6 promise API のみが回答してください。
javascript - Javascript 非同期の例が機能しない
私は es6 の約束を試して連鎖させていますが、私の例がうまくいかない理由がわかりません。
printInterval() と setInterval() を複数回連鎖させ、_interval が次のように減少することを期待します。
- このメッセージが表示されるまで 3000 ミリ秒待機しました
- 間隔を 2000 に設定
- このメッセージが表示されるまで 2000 ミリ秒待機しました
- 間隔を 1000 に設定
- このメッセージが表示されるまで 1000 ミリ秒待機しました
- 間隔を 500 に設定
- このメッセージが表示されるまで 500 ミリ秒待機しました
しかし、私は次のようになります:
- このメッセージが表示されるまで 3000 ミリ秒待機しました
- 間隔を 2000 に設定
- 間隔を 1000 に設定
- 間隔を 500 に設定
- このメッセージが表示されるまで 500 ミリ秒待機しました
- このメッセージが表示されるまで 500 ミリ秒待機しました
- このメッセージが表示されるまで 500 ミリ秒待機しました
.
ありがとう!
javascript - 解決を開始せずに (ES6) promise を作成する
ES6 promise を使用して、それを解決するためのロジックを定義せずに promise を作成するにはどうすればよいですか? 基本的な例を次に示します (一部の TypeScript)。
他の promise ライブラリで簡単に実行できます。JQuery の例:
これを行う唯一の方法は、resolve 関数を promise のエグゼキューター内のどこかに保存することですが、それは面倒に思えます。この関数が正確に実行されたときに定義されているかどうかはわかりません-常に構築時にすぐに実行されますか?
ありがとう。
javascript - この延期されたスタイルの約束を ES6 スタイルの約束に変換する方法
Nolan Lawsonの記事の「ルーキー ミス #4: using "deferred"」を参照してください:私たちは promise に問題があります(すばらしい投稿です!)。最近、これを据え置きの方法でコーディングしない方法がわからないという実用的な例に遭遇したので、アドバイスが必要です。
以下は、Angular ファクトリの例です。
いくつかの無関係な詳細 (例: の実装_modalScope
) を非表示にします。コアとなるアイデアは、次の$modal
2 つのボタンを含む UI ウィジェットを提供することです: ConfirmとCancel。Confirmがクリックされたら、保留された promise を呼び出して解決します。それ以外の場合は、 Cancelがクリックされたときに_modalScope.confirm
呼び出して、保留された promise を拒否します。_modalScope.cancel
を使用して書き直そうとしましたが、実際のロジックはメソッドにあるため、このコンストラクターでどのようにreturn $q(function(resolve, reject) { ... })
/いつ呼び出すかが本当にわかりません。私はこの問題に何日も苦労しています。誰かが私を助けてくれることを本当に願っています。resolve
reject
_modalScope.confirm/cancel
ありがとう!