Heim  >  Artikel  >  Web-Frontend  >  Ein einfacher Manager für asynchrone Node.js-Operationen, der Javascript-Kenntnisse teilt

Ein einfacher Manager für asynchrone Node.js-Operationen, der Javascript-Kenntnisse teilt

WBOY
WBOYOriginal
2016-05-16 16:50:471123Durchsuche

Ich habe in letzter Zeit viel über Nodejs geschrieben, weil das, was ich tun wollte, relativ einfach war und ich festgestellt habe, dass es eine synchrone Operation gibt Ich habe gerade die synchrone Funktion verwendet. Das ist kein Problem, aber es ist wirklich peinlich, dass viele Dinge keine synchrone API haben.

Okay! Beim asynchronen Schreiben tauchte diese Art von Code nach und nach auf. . .

Code kopieren Der Code lautet wie folgt:

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

Nun, Sie haben auch gesehen, wie hässlich der Code sein wird, wenn er so weitergeht. Er wird wie ein Fußtuch einer alten Dame aussehen, also wird der folgende asynchrone Betriebsmanager generiert: Klein und exquisit, hehe, das ist definitiv genug Code, lassen Sie uns mit dem Code darüber sprechen. Markieren Sie einfach den Code, z. B.:
TODO: Nicht umfassend genug, Fehler werden beispielsweise nicht behandelt


Code kopieren Der Code lautet wie folgt:

/*
* Async Manager
* Autor: jser.me
*
* Verwendung:
* var asyncMg = require('./AsyncManager') ;
* asyncMg
* .push(function(next){
* some_aysnc_method().on('success'{
* next();
*                                                                                                           * })
* })
* .push( ... )
* .run() //Ausführen
* .on('success', function() {
* allThings_is_down();
*    });
function typeOf( obj ){
return Object.prototype.toString.call( obj ).match(/[object ([^]]*)]/)[1];
}

function AsyncManager( arg ){
this.execArrys = [];
this.push( arg );
}

//Verwenden Sie die vom System bereitgestellte Vererbungsmethode require('util').inherits( AsyncManager, require('events').EventEmitter );


//Markieren Sie die Anzahl erfolgreich ausgeführter Funktionen
AsyncManager.prototype.succCount = 0;


//Hinzufügen
AsyncManager.prototype.push = function( arg ) {

var This = this;

if( typeOf(arg) == 'Array' ){
arg.forEach( function(v,i){

This.execArrys.push( v );

          });
                                                                                .

//Ausführen

AsyncManager.prototype.run = function(){
var self = this;

If( this.succCount == this.execArrys.length ) {

//Ereignisse werden ausgelöst, nachdem alle Funktionen erfolgreich ausgeführt wurden
this.emit( ​​​​'success' );
} else {
this.execArrys[ this.succCount ]( self.run.bind( self ) );
}

this.succCount ;
return this; //Chain one

};


exports = module.exports = function( arg ){

return new AsyncManager( arg );

}


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