編集: angular v1.2 の時点で、ビューのプロミスの解決はデフォルトではアクティブ化されていません。
ビュー内の promise の自動解決は、最初は便利なツールのように見えますが、理解して慎重に評価する必要がある多くの制限があります。このアプローチの最大の問題は、Promise にコールバックを追加するのは AngularJS であり、それをほとんど制御できないことです。
質問への回答:
1) 示されているように、成功/エラーのコールバックを追加するのは最終的に AngularJS であるため、ここではあまり制御できません。あなたができることは、解決を追跡するカスタムの約束に元の約束をラップすることです。しかし、この種の巧妙なキーストロークを節約するという全体的な目的。いいえ、「解決済み」のようなものはありません。要するに、すべての約束に対して機能する、進行状況を追跡するための普遍的なメカニズムはありません。promise が に基づいている場合は、進行中のリクエストを追跡するために$http
インターセプターまたはプロパティを使用できます。pendingRequests
2) できません。$parse
繰り返しになりますが、サービス内にハンドラーを追加するのは AngularJS であり、次のようになりますpromise.then(function(val) { promise.$$v = val; });
(コードはこちら)。成功のコールバックのみが追加されていることがわかるため、すべての失敗は黙って無視されます。
これらは、ビューでの自動プロミス解決の唯一の制限ではありません。もう 1 つの問題は、関数によって返される promise が正しく解決されないことです。たとえば、次のように例を書き直すとします。
myModule.controller('HelloCtrl', function($scope, HelloWorld) {
$scope.messages = function() {
return HelloWorld.getMessages();
}
});
次のマークアップを使用してみてください。
<li ng-repeat="message in messages()"></li>
物事は期待通りに機能しますが、これは驚くべきことかもしれません。
つまり、Promise の自動解決は便利な近道のように思えるかもしれませんが、多くの制限と非自明な動作があります。それらを慎重に評価し、キーストロークをほとんど節約する価値があるかどうかを判断してください。