In meinem Controller bekomme ich ein Versprechen von einem anderen Dienst. Ich füge eine "then" -Klausel hinzu, aber das "then" wird nie aufgerufen.
Sieh diesen Plünderer: Ссылка ( JavaScript-Version )
'fakeLongRunningPromise' erstellt ein Versprechen, das sich nach 2 Sekunden selbst löst.
Im Controller selbst sende ich eine Notiz an die Konsole, sobald das Versprechen gelöst ist.
Ich kann sagen, dass das Versprechen gelöst wurde, weil "Versprechen lösen" an die Konsole ausgegeben wurde. Warum gibt es "Versprechen gelöst" nicht aus?
Denken Sie vielleicht, dass das Versprechen "außerhalb des Geltungsbereichs" liegt, weil der Controller zurückkehrt?
Das AngularJS, das Ergebnis der Versprechungsauflösung, wird asynchron innerhalb eines $ Digest-Zyklus propagiert. Die Callbacks, die mit then
registriert wurden, werden also erst beim Eintritt in den $ Digest-Zyklus aufgerufen. Das setTimeout
wird "außerhalb der AngularJS-Welt" ausgeführt und löst daher keine Callbacks aus.
Die Lösung besteht darin, Scope.$apply
oder den $timeout
-Dienst zu verwenden. Hier ist die Version mit $ apply:
Hier ist ein fester Plunk (JavaScript): Ссылка
Tags und Links angularjs