Heim  >  Artikel  >  Web-Frontend  >  Beispiel für eine einfache Implementierung des Javascript Promise-Mechanismus in nodejs_node.js

Beispiel für eine einfache Implementierung des Javascript Promise-Mechanismus in nodejs_node.js

WBOY
WBOYOriginal
2016-05-16 16:28:441523Durchsuche

Promise/Deferred ist eine gute Spezifikation für die Handhabung der asynchronen Aufrufcodierung. Im Folgenden wird NodeJS-Code als Klasse verwendet, um eine einfache Implementierung der Promise/A-Spezifikation zu implementieren.

Code kopieren Der Code lautet wie folgt:

/**
 * Erstellt mit JetBrains WebStorm.
 * Benutzer: xuwenmin
 * Datum: 14.4.1
 * Uhrzeit: 9:54 Uhr
 * Um diese Vorlage zu ändern, verwenden Sie Datei | Einstellungen | Dateivorlagen.
 */

var EventEmitter = require('events').EventEmitter;
var http = require('http');
var util = require('util');
//Versprechungsobjekt definieren
var Promise = function(){
// Geerbte Ereignisklasse implementieren
EventEmitter.call(this);
}
//Allgemeine Ereignismethode erben
util.inherits(Promise, EventEmitter);
//Die then-Methode ist die Methode in der Promise/A-Spezifikation
Promise.prototype.then = function(successHandler, errorHandler, progressHandler){
If (typeof successHandler == 'function'){
This.once('success', successHandler);
}
If (typeof errorHandler === 'function'){
This.once('error', errorHandler);
}
If (typeof progressHandler === 'function'){
This.on('process', progressHandler);
}
Geben Sie dies zurück;
}

//Deferred Object definieren
//Enthält einen Zustand und ein Versprechensobjekt
var Deferred = function(){
This.state = 'unerfüllt';
This.promise = new Promise();
}
Deferred.prototype.resolve = function(obj){
This.state = 'erfüllt';
This.promise.emit('success', obj);
}
Deferred.prototype.reject = function(err){
This.state = 'failed';
This.promise.emit('error', err);
}
Deferred.prototype.progress = function(data){
This.promise.emit('process', data);
}

//Verwenden Sie eine http-Anfrage, um das oben definierte Versprechen/aufgeschoben anzuwenden

var client = function(){
var-Optionen = {
Hostname:'www.baidu.com',
Port:80,
        Pfad:'/',
Methode: 'get'
};
var deferred = new Deferred();
var req = http.request(options, function(res){
          res.setEncoding('utf-8');
      var data = '';
          res.on('data', function(chunk){
              data = chunk;
               deferred.progress(chunk);
});
          res.on('end', function(){
              deferred.resolve(data);
});
});
req.on('error', function(err){
         deferred.reject(err);
})
req.end();
Rückgabe deferred.promise;
}
client().then(function(data){
console.log('Anfrage abgeschlossen', Daten);
}, function(err){
Console.log('Zugriffsfehler', err);
}, function(chunk){
console.log('reading', chunk);
});

Der Code wird als Promise.js gespeichert und kann über die Befehlszeile ausgeführt werden. Geben Sie direkt Node Promise.js ein, um den laufenden Effekt zu sehen.

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn