La promesse / différée est une bonne spécification pour gérer le codage des appels asynchrones. Le suivant utilise le code NodeJS comme classe pour implémenter une simple implémentation de promesse / une spécification
La copie de code est la suivante:
/ **
* Créé avec JetBrains Webstorm.
* Utilisateur: Xuwenmin
* Date: 14-4-1
* Heure: 9h54
* Pour modifier ce modèle, utilisez le fichier | Paramètres | Modèles de fichiers.
* /
var eventEMmitter = require ('Events'). EventEMmitter;
var http = require ('http');
var util = require ('util');
// Définir l'objet Promise
var promest = function () {
// Implémentez la classe d'événements héritiers
EventEmitter.Call (this);
}
// Méthode générale pour hériter des événements
util.inherits (promesse, eventEmitter);
// alors la méthode est la méthode de la promesse / une spécification
Promesse.prototype.then = fonction (successeur, errorhandler, progresshandler) {
if (typeof SuccessHandler == 'function') {
this.once («succès», SuccessHandler);
}
if (typeof errorhandler === 'function') {
this.once ('error', errorhandler);
}
if (typeof progresshandler === 'fonction') {
this.on («processus», progresshandler);
}
retourner ceci;
}
// Définir l'objet de retard
// contient un état et un objet de promesse
var différé = fonction () {
this.state = 'non satisfait';
this.promise = new promest ();
}
Deferred.prototype.resolve = fonction (obj) {
this.state = 'accompli';
this.promise.emit («succès», obj);
}
Deferred.prototype.reject = fonction (err) {
this.state = 'a échoué';
this.promise.emit ('error', err);
}
Deferred.prototype.progress = fonction (data) {
this.promise.emit («processus», données);
}
// Utilisez une demande HTTP pour utiliser la promesse / différée définie ci-dessus
var client = function () {
Var Options = {
nom d'hôte: «www.baidu.com»,
Port: 80,
chemin:'/',
Méthode: 'Get'
};
var différé = nouveau différé ();
var req = http.request (options, fonction (res) {
res.setEncoding ('UTF-8');
var data = '';
res.on ('data', fonction (chunk) {
data + = chunk;
Deferred.progress (morceau);
});
res.on ('end', function () {
Deferred.resolve (données);
});
});
req.on ('error', fonction (err) {
Deferred.Reject (ERR);
})
req.end ();
retour différé.promes;
}
client (). alors (fonction (data) {
console.log («demande terminée», données);
}, fonction (err) {
Console.log («Erreur d'accès», ERR);
}, fonction (chunk) {
Console.log («lecture», Chunk);
});
Enregistrez le code en tant que promesse.js, vous pouvez l'exécuter sous la ligne de commande. Entrez directement Node Promise.js pour voir l'effet en cours d'exécution.