Promise/Deferred ist eine gute Spezifikation für den Umgang mit asynchroner Call -Codierung. Im Folgenden wird NodeJS -Code als Klasse verwendet, um eine einfache Implementierung von Versprechen/einer Spezifikation zu implementieren
Die Codekopie lautet wie folgt:
/**
* Erstellt mit JetBrains Webstorm.
* Benutzer: xuwenmin
* Datum: 14-4-1
* Zeit: 9:54 Uhr
* Um diese Vorlage zu ändern, verwenden Sie Datei | Einstellungen | Dateivorlagen.
*/
var eventEmitter = required ('events'). eventEmitter;
var http = required ('http');
var util = require ('util');
// Versprechensobjekt definieren
var dadurch = function () {
// Erbschaftsereignisklasse implementieren
EventEmitter.call (this);
}
// Allgemeine Methode zur Erbscheibe von Ereignissen
util.inherits (Versprechen, Eventemitter);
// dann ist die Methode die Methode in der Versprechen/A -Spezifikation
Promise.Prototype.Then = Funktion (SuccessHandler, ERRAGEHANDLER, ProgressHandler) {
if (typeof SuccessHandler == 'Funktion') {
this.once ('Erfolg', SuccessHandler);
}
if (typeof errorHandler === 'Funktion') {
this.once ('error', errorHandler);
}
if (typeof progreshandler === 'Funktion') {
this.on ('prozess', progreshatler);
}
gib dies zurück;
}
// Definieren Sie das Verzögerungsobjekt
// enthält einen Zustand und ein Versprechensobjekt
var deferred = function () {
this.state = 'unerfüllt';
this.Promise = New Promise ();
}
Deferred.Prototype.Resolve = Funktion (obj) {{
this.state = 'erfüllt';
this.Promise.emit ('Erfolg', obj);
}
Deferred.Prototype.Reject = Funktion (err) {
this.state = 'fehlgeschlagen';
this.Promise.emit ('error', err);
}
Deferred.Prototype.Progress = Funktion (Daten) {{
this.Promise.emit ('prozess', Daten);
}
// Verwenden Sie eine HTTP -Anfrage, um das oben definierte Versprechen/aufgeschobene zu verwenden
var client = function () {
var options = {
Hostname: 'www.baidu.com',
Port: 80,
Weg:'/',
Methode: 'Get'
};
var deferred = new Deferred ();
var req = http.request (Optionen, Funktion (res) {
res.setencoding ('utf-8');
var data = '';
res.on ('Daten', Funktion (Chunk) {
Daten += Chunk;
aufgeschoben.Progress (Chunk);
});
res.on ('end', function () {
aufgeschoben.Resolve (Daten);
});
});
req.on ('error', function (err) {
aufgeschoben.Reject (err);
})
req.end ();
Rückgabe aufgeschoben.Promise;
}
Client (). Dann (Funktion (Daten) {
console.log ('Anfrage abgeschlossen', Daten);
}, function (err) {
console.log ('Zugriffsfehler', err);
}, Funktion (Chunk) {
console.log ('Reading', Chunk);
});
Speichern Sie den Code als Versprechen.js, Sie können ihn unter der Befehlszeile ausführen. Geben Sie Node Promise.js direkt ein, um den laufenden Effekt zu sehen.