BEARBEITEN: ab dem Winkel v1.2 die resolution of promise in views is not activated by default.
Die automatische Auflösung von Versprechen in einer Ansicht sieht zunächst wie ein handliches Werkzeug aus, aber es gibt eine Reihe von Einschränkungen, die sorgfältig verstanden und bewertet werden müssen. Das größte Problem bei diesem Ansatz ist, dass AngularJS Rückrufe zu einem Versprechen hinzufügen wird und wir wenig Kontrolle darüber haben.
beantworten Ihre Fragen:
1) Wie bereits erwähnt, ist es letztlich AngularJS, die ein Erfolg/Fehler Callbacks hinzufügen, so dass wir hier nicht viel Einfluss haben. Sie können das ursprüngliche Versprechen in ein benutzerdefiniertes Versprechen umwandeln, das die Auflösung verfolgt. Aber diese Art von geschickten den ganzen Zweck der Rettung von wenigen Tastenanschlägen. Und nein, es gibt keine Dinge wie "aufgelöst". Kurz gesagt - es gibt keinen universellen Mechanismus zur Verfolgung von Fortschritten, der für alle Versprechen funktionieren würde. Wenn Ihre Versprechen $http
-based sind, können Sie Interceptors oder pendingRequests
-Eigenschaft verwenden, um Anforderung in Bearbeitung zu verfolgen.
2) Sie können nicht. AngularJS fügt wiederum einen Handler in den Dienst $parse
ein und sieht so aus: promise.then(function(val) { promise.$$v = val; });
(siehe Code here). Sie können sehen, dass nur ein Erfolgsrückruf hinzugefügt wird, so dass alle Fehler stillschweigend ignoriert werden.
Dies sind nicht die einzigen Einschränkungen der automatischen Verspre- chensauflösung in der Ansicht. Das andere Problem besteht darin, dass die von einer Funktion zurückgegebenen Versprechen nicht korrekt gelöst werden. wenn Sie ein Beispiel, wie so würde umschreiben Zum Beispiel:
myModule.controller('HelloCtrl', function($scope, HelloWorld) {
$scope.messages = function() {
return HelloWorld.getMessages();
}
});
und versuchen, das folgende Markup zu verwenden:
<li ng-repeat="message in messages()"></li>
Dinge würden wie erwartet, die als Überraschung kommen könnte.
Kurz gesagt: Während die automatische Auflösung von Versprechen wie eine praktische Abkürzung scheint, hat sie eine Reihe von Einschränkungen und nicht offensichtlichen Verhaltensweisen. Bewerten Sie diese sorgfältig und entscheiden Sie, ob es sich lohnt, wenige Tastenanschläge zu speichern.
lesen Sie gerade über $ q auf eckige offizielle Dokumente und Ihre obigen zwei Fragen werden beantwortet –
Es scheint nicht, dass #rtfm hier hilft, weil ich das Versprechen nicht programmatisch verwenden möchte, sondern aus der Sicht wie beschrieben in der Frage/Artikel. Das scheint nicht Teil der Dokumentation zu sein. – Pipo