Maison > interface Web > js tutoriel > Exemple d'implémentation simple du mécanisme Javascript Promise dans nodejs_node.js

Exemple d'implémentation simple du mécanisme Javascript Promise dans nodejs_node.js

WBOY
Libérer: 2016-05-16 16:28:44
original
1556 Les gens l'ont consulté

Promise/deferred est une bonne spécification pour gérer le codage d'appels asynchrones. Ce qui suit utilise le code nodejs comme classe pour implémenter une implémentation simple de la spécification promise/A
.

Copier le code Le code est le suivant :

/**
 * Créé avec JetBrains WebStorm.
 * Utilisateur : xuwenmin
 *Date : 14-4-1
 * Heure : 9 h 54
 * Pour modifier ce modèle, utilisez Fichier | Paramètres | Modèles de fichiers.
 */

var EventEmitter = require('events').EventEmitter;
var http = require('http');
var util = require('util');
//Définir l'objet de promesse
var Promesse = function(){
// Implémentation de la classe d'événement héritée
EventEmitter.call(this);
>
//Hériter la méthode générale de l'événement
util.inherits(Promesse, EventEmitter);
//La méthode then est la méthode de la spécification promise/A
Promise.prototype.then = function(successHandler, errorHandler, progressHandler){
Si (type de successHandler == 'function'){
This.once('success', successHandler);
>
Si (typeof errorHandler === 'function'){
This.once('erreur', errorHandler);
>
Si (type de progressHandler === 'fonction'){
This.on('process', progressHandler);
>
Renvoyez ceci ;
>

//Définir un objet différé
//Contient un état et un objet de promesse
var Différé = fonction(){
This.state = 'non réalisé';
This.promise = new Promise();
>
Deferred.prototype.resolve = function(obj){
This.state = 'réalisé';
This.promise.emit('success', obj);
>
Deferred.prototype.reject = function(err){
This.state = 'échec';
This.promise.emit('error', err);
>
Deferred.prototype.progress = fonction (données) {
This.promise.emit('processus', data);
>

//Utiliser une requête http pour appliquer la promesse/différé défini ci-dessus

var client = fonction(){
options var = {
Nom d'hôte : 'www.baidu.com',
Port :80,
        chemin :'/',
Méthode : 'obtenir'
};
var différé = new Deferred();
var req = http.request(options, fonction(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('erreur', fonction(erreur){
         deferred.reject(err);
})
req.end();
Retour différé.promise;
>
client().then(function(data){
console.log('Demande terminée', données);
}, fonction(erreur){
Console.log('Erreur d'accès', err);
}, fonction(morceau){
console.log('lecture', morceau);
});

Le code est enregistré sous promise.js, qui peut être exécuté sous la ligne de commande. Entrez directement le nœud promise.js pour voir l'effet d'exécution.

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal