Maison > interface Web > js tutoriel > Un simple gestionnaire d'opérations asynchrones Node.js, compétences Sharing_Javascript

Un simple gestionnaire d'opérations asynchrones Node.js, compétences Sharing_Javascript

WBOY
Libérer: 2016-05-16 16:50:47
original
1171 Les gens l'ont consulté

J'ai beaucoup écrit sur nodejs récemment. J'ai rencontré moins d'opérations asynchrones au début car ce que je voulais faire était relativement simple, j'ai vérifié l'API et j'ai découvert qu'il y en avait une synchrone. J'ai juste utilisé la version synchrone. Petit à petit, j'ai découvert que ce n'était pas un problème. Nous n'avons pas besoin des bonnes fonctionnalités asynchrones, mais nous devons utiliser des fonctionnalités synchrones. C'est vraiment embarrassant et beaucoup de choses n'ont pas d'API synchrones.

D'accord ! En écrivant de manière asynchrone, ce type de code est progressivement apparu. . .

Copier le code Le code est le suivant :

mysql.query('xxxx'). on('succès', function(){
mysql.query('xxxx').on('succès', function(){
mysql.query('xxxx').on('succès', function() {
mysql.query('xxxx').on('succès', function(){
mysql.query('xxxx').on('succès', function(){
mysql. query('xxxx').on('success', function(){
                                                                                                 });
});
});
});

Eh bien, vous avez également vu à quel point le code sera laid s'il continue comme ça. Il ressemblera à un chausson de vieille dame, donc le gestionnaire d'opérations asynchrones suivant est généré, Petit et exquis, hehe, c'est certainement suffisant. code, parlons-en avec le code. Mettez simplement en surbrillance le code, tel que :
TODO : Pas assez complet, par exemple, les erreurs ne sont pas gérées


Copier le code Le code est le suivant :

/*
* Async Manager
* auteur : jser.me
*
* Utilisation :
* var asyncMg = require('./AsyncManager') ;
* asyncMg
* .push(function(next){
* some_aysnc_method().on('success'{
* next();
*                                                                                                  suivant( );
* })
* })
* .push( ... )
* .run() //Exécuter
* .on('succès', function() {
* allThings_is_down();
*    });
function typeOf( obj ){
return Object.prototype.toString.call( obj ).match(/[object ([^]]*)]/)[1];
}

fonction AsyncManager( arg ){
this.execArrys = [];
this.push( arg );
}
//Utilisez la méthode d'héritage fournie par le système

require('util').inherits( AsyncManager, require('events').EventEmitter );

//Marquer le nombre de fonctions exécutées avec succès

AsyncManager.prototype.succCount = 0;



//Ajouter
AsyncManager.prototype.push = function( arg ) {

var This = this;
if( typeOf(arg) == 'Array' ){

arg.forEach( function(v,i){

This.execArrys.push( v );
          });

                                                                                .

//Exécuter
AsyncManager.prototype.run = function(){
var self = this;

If( this.succCount == this.execArrys.length ) {
//Les événements sont déclenchés une fois que toutes les fonctions ont été exécutées avec succès
this.emit( ​​​​​​'success' );
} else {
this.execArrys[ this.succCount ]( self.run.bind( self ) );
}

this.succCount ;

return this; //Chaîne un

};

exports = module.exports = function( arg ){

return new AsyncManager( arg );
}



É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