Eckige 2-äquivalent für $timeout
Habe ich (große Mengen) vorhandenen code in eine Eckige 2-Umgebung. Code macht umfangreichen Gebrauch von der $timeout
service von AngularJS 1.x. Im Gegensatz zu verschiedenen anderen AngularJS 1.x-Dienste, sind im code verwendet, ich habe eine harte Zeit der Suche nach einem Informationen über eine Eckige 2-äquivalent für die $timeout
service.
Den Winkel-docs scheint das nicht zu enthalten, jede Erwähnung einer Dienstleistung mit timeout
-etwas in seinen Namen. Der Artikel Upgrade von AngularJS erwähnt, das Szenario bin ich vor:
Vielleicht wollen Sie Zugang zu AngularJS built-in-Dienste wie
$location
oder$timeout
.
Leider ist der Artikel nicht wirklich erklären, wie der Zugriff auf diese besonderen Dienstleistungen, wie das nachfolgende Beispiel HeroesService
übernimmt einen Dienst, ohne irgendwelche Abhängigkeiten geliefert von AngularJS 1.x.
Artikel wie diese eine empfehlen die Verwendung der nativen setTimeout
- Funktion nicht Leben bis zu den Fähigkeiten des $timeout
- Dienstleistungen.
Wie kann ich reproduzieren, die $timeout
Funktionalität in das Eckige 2-Umgebung?
EDIT: Wie schon erwähnt in den Antworten, die Nachteile der native setTimeout
Funktion nicht relevant sind bei der Verwendung von Winkel-2. In diesem Fall, wenn ich hatte die volle $q
von AngularJS 1.x, ich könnte replizieren die $timeout
Funktion die in etwa wie diese:
function $timeout(fn, delay) {
var result = $q.defer();
setTimeout(function () {
$q.when(fn()).then(function (v) {
result.resolve(v);
});
}, delay);
return result.promise;
}
stackoverflow.com/a/44096451/8317956
Die
delay
- operator wird, um eine Observable
, so würde ich Sie loswerden muss, um heben die Dinge wieder auf die richtige verspricht. Der erste link mit dem Zeiger auf Timer sieht vielversprechend aus, obwohl, vielleicht kann ich das Handwerk ein wrapper, der angezeigt wird, wie das original $timeout
auf der Grundlage, dass. Ich Frage mich nur, warum kann ich nicht finden timer
im Winkel-docs?InformationsquelleAutor O. R. Mapper | 2017-08-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden
setTimeout
native Funktion auf. Es gibt keine Notwendigkeit, spezielle services in Angular mehr. Dies ist aufgrund der Einführung von Zonen, speziell NgZone.Warum macht man das so sagen? Die Hauptaufgabe der
$timeout
service war zu Beginn verdauen, nachdem die verzögerte Funktion ausgeführt wird. Sie können sehen, es aus den Quellen:In Eckigen
zone.js
fängt alle asynchronen Operationen und startet die Erkennung von änderungen in der Winkelgeschwindigkeit, die ist Art verbesserte version des digest.Wenn Sie brauchen, um zu replizieren, die
$timeout
können Sie ungefähr tun es wie folgt:In jedem Fall bin ich nicht sicher, wie Sie Sie verwenden
setTimeout
etwas zu schaffen, wie$timeout
. Ich will wieder ein Versprechen, so in AngularJS 1.x, ich würde wahrscheinlich benötigen, um erstellen Sie eine latente und lösen es innerhalb der Funktion übergebensetTimeout
. Das problem ist, dass$q.defer()
fehlt im Winkel 2, gut.die Artikel, die Sie erwähnt spricht über den Unterschied im Kontext von AngularJS. Was Sie sagt, passt nicht zu Eckig. Angular verwendet
zone.js
zum abfangen von asynchronen Operationen und führen digestIch aktualisiert meine Frage, um ein Beispiel für die Neuerstellung der
$timeout
Funktionalität.Ich habe die Umsetzung auf meine Antwort.
InformationsquelleAutor Max Koretskyi aka Wizard