3

AngularJS の promise は、ダイジェスト サイクルが実行されるまで成功/エラーのコールバックが呼び出されないため、ダイジェスト サイクルに関連付けられているようです。これは、$httpまたは手動で作成されたプロミスなど、プロミスを使用するものはすべて、コールバックを実行するためにダイジェスト サイクルをトリガーする必要があることを意味します。

ダイジェスト サイクルをまったく実行せずに、Angular で promise を使用することは可能ですか? ダイジェスト サイクルを少し後でスケジュールする を使用できることは$applyAsyncわかっていますが、ダイジェスト サイクルをまったく実行せずにthenコールバックを実行したいと考えています。

基本的に、私は、プロミスの解決が必要であるが必ずしもダイジェスト サイクルの実行が必要ではないかなりの量の非同期動作を使用するアプリから、可能な限り多くのパフォーマンスを引き出す方法を考え出そうとしています。

4

1 に答える 1

3

いいえ、現在それはできません。thenハンドラーが実行されるたびに$evalAsync、ダイジェストがまだスケジュールされていない場合は、ダイジェストをスケジュールするコールバックがスケジュールされます。

これに対する例外は$timeout、ダイジェストを実行しないように追加の引数を受け入れることです。一方、同じターンに解決される複数のプロミスは、同じダイジェストで実行されます。

あなたの選択肢は次のとおりです: - XMLHttpRequqest を直接、真剣に使用してください - それはそれほど難しいことではありません。これの最大の欠点は、インターセプターやその他の $http フック (モック バックエンドなど) を考慮しないことです。$q-経由でスケジューリングしないように装飾するか、 経由でスケジューリングする promise プロトタイプにメソッドを$evalAsync追加します。- $http または XHR で $q の代わりにユーザーランド promise ライブラリを使用します。.thenNoDigestsetTimeout

于 2015-04-03T19:03:25.953 に答える