Nehmen wir ein Geschäftsszenario an:
Holen Sie sich über die RSS -Adresse die RSS und speichern Sie sie in der Datei, und die RSS -Adresse wird in der Datei gespeichert.
Um das Geschäft in diesem Szenario abzuschließen, sind drei Aufgaben erforderlich:
1. Lesen Sie die RSS -Adresse aus der Datei.
2. Holen Sie sich RSS.
3.. In der Datei speichern.
Schließlich sind diese drei Aufgaben integriert.
Vorbereiten:
Dateien, die die RSS -Adresse speichern, address.txt.
http://programmer.csdn.net/rss_programmer.html
Aufgabe 1:
Lesen Sie den Inhalt der RSS -Adressdatei und kehren Sie per Callback zurück.
Die Codekopie lautet wie folgt:
var getrssaddress = function (Pfad, Rückruf) {
fs
Rückruf (Err, Daten);
});
}
Aufgabe 2:
Holen Sie sich über die RSS -Adresse und geben Sie Fehler oder Daten über den Rückruf zu RSS.
Die Codekopie lautet wie folgt:
var getrss = function (URL, Rückruf) {
var data = '';
http.get (url, function (res) {
res.on ('data', function (chrunk) {
Daten += Chrunk;
});
res.on ('end', function () {
Rückruf (NULL, Daten);
});
}). On ('Fehler', Funktion (err) {
Rückruf (err, null);
});
}
Aufgabe 3:
Speichern Sie RSS in einer Datei und geben Sie einen Fehler per Rückruf zurück.
Die Codekopie lautet wie folgt:
var Saverss = Funktion (Daten, Rückruf) {
fs.writeFile ('rsss.txt', data, 'utf8', function (err) {
Rückruf (arr);
});
}
Integration:
Die Codekopie lautet wie folgt:
getrssaddress ('adress.txt', function (err, data) {
if (err) {
console.log (err);
zurückkehren;
}
GetRSS (Daten, Funktion (Err, Daten) {
if (err) {
console.log (err);
zurückkehren;
}
Savers (Daten, Funktion (Err) {
if (err) console.log (err);
});
});
});
Der obige Code ist eine vollständig asynchrone Verarbeitung. Der häufigste Rückruf wird verwendet, um die Rückgabe der asynchronen Logik zu verarbeiten. Der Vorteil ist, dass die Standard -Schreibmethode für alle einfach zu akzeptieren ist. Der Nachteil ist, dass die Kopplung zu stark ist. Der Umgang mit Ausnahmen ist, dass der Code nicht intuitiv ist, insbesondere wenn es um komplexe Geschäftslogik und viele Aufgaben geht. Die geschichteten Rückrufe werden die Leute dazu bringen, sie zu betrachten, und der Code ist schwer zu pflegen.
Eine der Implementierungen des Versprechens/einer Spezifikation ist, wann.js, das auf einen solchen Problembereich abzielt.
Schauen wir uns den geänderten Code an.
Aufgabe 1:
Die Codekopie lautet wie folgt:
var getrssaddress = function (path) {
var deferred = wenn.Defer ();
fs
if (err) verschoben.Reject (err);
aufgeschoben.Resolve (Daten);
});
Rückgabe aufgeschoben.Promise;
}
Aufgabe 2:
Die Codekopie lautet wie folgt:
var getrss = function (url) {
var deferred = wenn.Defer ();
var data = '';
http.get (url, function (res) {
res.on ('data', function (chrunk) {
Daten += Chrunk;
});
res.on ('end', function () {
aufgeschoben.Resolve (Daten);
});
}). On ('Fehler', Funktion (err) {
aufgeschoben.Reject (err);
});
Rückgabe aufgeschoben.Promise;
}
Aufgabe 3:
Die Codekopie lautet wie folgt:
var Saverss = Funktion (Daten) {
var deferred = wenn.Defer ();
fs.writeFile ('rsss.txt', data, 'utf8', function (err) {
if (err) verschoben.Reject (err);
aufgeschoben.resolve ();
});
Rückgabe aufgeschoben.Promise;
}
Integration:
Die Codekopie lautet wie folgt:
getrssaddress ('address.txt')
. Dann (getrss)
. Dann (Sparer)
.Catch (Funktion (Err) {
console.log (err);
});
erklären:
Das durch das Versprechen/A -Spezifikation definierte Modell "Deferred/Promise" ist das Modell "Publish/Abonnent". Das Veröffentlichen von Ereignissen über das aufgeschobene Objekt kann ein Ereignis für die Abschlussauflösung oder ein fehlgeschlagenes Ablehnungsereignis sein. Entsprechende abgeschlossene oder fehlgeschlagene Abonnements werden über das Versprechensobjekt vorgenommen.
In den Versprechen/einer Spezifikation enthält jede Aufgabe drei Zustände: Standard (ausstehend), erfüllt (erfüllt) und fehlgeschlagen (abgelehnt).
1. Der Standardzustand kann in eine Richtung in den Abschlusszustand übertragen werden. Dieser Prozess wird als Lösung bezeichnet und die entsprechende Methode wird aufgeschoben.
2. Der Standardzustand kann auch in eine Richtung in den fehlgeschlagenen Zustand übertragen werden. Dieser Prozess wird als Ablehnung bezeichnet und die entsprechende Methode wird aufgeschoben.
3. Im Standardzustand können Sie auch Informationen zur Ausführung von Aufgaben über aufgeschobene (Update) wie Ausführungsfortschritte deferenzieren.
4. Die staatliche Übertragung ist einmalig. Sobald sich die Aufgabe von der anfänglichen Auszeit in andere Zustände ändert, wird der Ausführungsprozess der nächsten Aufgabe eingegeben.
Folgen Sie dem obigen Code.
Definieren Sie ein aufgeschobenes Objekt durch, wenn.Defer.
var deferred = wenn.Defer ();
Nachdem die asynchrone Daten erfolgreich erhalten wurden, wird ein Abschlussveranstaltung veröffentlicht.
aufgeschoben.Resolve (Daten);
Nachdem die asynchrone Datenerfassung fehlgeschlagen ist, wird ein fehlgeschlagenes Ereignis veröffentlicht.
aufgeschoben.Reject (err);
Und geben Sie das Versprechensobjekt als Abonnement zurück.
Rückgabe aufgeschoben.Promise;
Abonnement ist ein Abonnement, das durch die damalige Methode des Versprechensobjekts abgeschlossen/fehlgeschlagen/benachrichtigt wird.
getrssaddress ('address.txt')
. Dann (getrss)
Dann gibt es drei Parameter, nämlich überfüllte, aufgerichtete und on -progress
Versprechen.
Die vorherige Aufgabe ist Resolve (Daten), und die überfüllte Funktion wird ausgelöst und Daten werden als Parameter verwendet.
Wenn die vorherige Aufgabe abgelehnt wird (Grund), wird Onrejected ausgelöst und ein Grund empfangen.
Zu irgendeinem Zeitpunkt kann nur eine von erläuterten und aufgelösten und nur einmal ausgelöst werden.
Für den Umgang mit Ausnahmen bietet Js auch eine äußerst bequeme Methode. Dann kann Fehler bestehen. Wenn mehrere Aufgaben seriell ausgeführt werden, können wir dann nur in der letzten Zeit definieren. Sie können die Fangfunktion auch nach dem letzten aufrufen, um dann eine Ausnahme von Aufgaben zu fangen.
Dies ist eine einfache und klare Art, es zu schreiben.
Die Codekopie lautet wie folgt:
getrssaddress ('address.txt')
. Dann (getrss)
. Dann (Sparer)
.Catch (Funktion (Err) {
console.log (err);
});
Promise bringt großen Bequemlichkeitsmöglichkeiten für asynchrone Programme und ermöglicht es uns, sich auf die Umsetzung einer einzelnen Aufgabe zu konzentrieren, ohne in das Pyramid -Unglück zu fallen. Der obige Code ist nur eine grundlegende Verwendung. Wenn.js viel mehr als die in diesem Artikel genannten Funktionen liefert, finden Sie Einzelheiten zur offiziellen API.