Heim  >  Artikel  >  Web-Frontend  >  Eine kurze Diskussion zur asynchronen asynchronen Programmierung in node.js_node.js

Eine kurze Diskussion zur asynchronen asynchronen Programmierung in node.js_node.js

WBOY
WBOYOriginal
2016-05-16 15:35:461083Durchsuche

1. Was ist asynchrone Programmierung?

Asynchrone Programmierung bezieht sich auf den Fall, dass die Ausführungsergebnisse aufgrund asynchroner E/A und anderer Faktoren nicht synchron erhalten werden können,
Der Codierungsstil zum Ausführen der nächsten Operation in der Rückruffunktion, gängige wie die SetTimeout-Funktion, Ajax-Anfrage usw.

Beispiel:

for (var i = 1; i <= 3; i++) {
setTimeout(function(){
console.log(i);
}, 0);
};

Die meisten Leute hier werden denken, dass die Ausgabe 123 oder 333 ist. Tatsächlich wird 444 ausgegeben

Hier ist, was wir über asynchrone Programmierung sprechen.

Definition erweiterter Funktionen

Warum sprechen wir hier von High-Level-Funktionen? Denn High-Level-Funktionen sind die Grundlage der asynchronen Programmierung.

Was sind also erweiterte Funktionen?
Tatsächlich akzeptieren erweiterte Funktionen Funktionen als Parameter oder als Rückgabewerte.

Beispiel:

function test(v){
return function(){
return v;
}
}

Das Obige dient dazu, eine Funktion als Rückgabewert zu verwenden.

2. Prozesskontrolle

Die Funktionen sind:
Serie
Wasserfall
parallel
parallelLimit

Serienfunktion Serienausführung

Seine Funktion besteht darin, es nacheinander auszuführen.

async.series({
  one: function(callback){
    callback(null, 1);
  },
  two: function(callback){
    callback(null, 2);
  }
},function(err, results) {
  console.log(results);
});

Ausgabe: {eins: 1, zwei: 2}

Der erste Parameter der Serienfunktion kann ein Array oder ein JSON-Objekt sein,
Verschiedene Parametertypen wirken sich auf das Format der zurückgegebenen Daten aus.

Wasserfallfunktion Wasserfallfluss

Wasserfall- und Serienfunktionen haben viele Ähnlichkeiten, beide werden der Reihe nach ausgeführt.
Der Unterschied besteht darin, dass der von jeder Funktion in Wasserfall generierte Wert an die nächste Funktion übergeben wird, während Serien diese Funktion nicht haben. Ein Beispiel ist wie folgt:

async.waterfall([
  function(callback){
    callback(null, 'one', 'two');
  },
  function(arg1, arg2, callback){
   // arg1 now equals 'one' and arg2 now equals 'two'
    callback(null, 'three');
  },
  function(arg1, callback){
    // arg1 now equals 'three'
    callback(null, 'done');
  }
], function (err, result) {
  // result now equals 'done'
  console.log(result);
});

Es sollte auch beachtet werden, dass der Aufgabenparameter von Wasserfall nur vom Array-Typ sein kann.
Wenn in der Mitte ein Funktionsfehler auftritt, wird sein Fehler direkt an den letzten Rückruf übergeben, das Ergebnis wird verworfen und nachfolgende Funktionen werden nicht mehr ausgeführt.

parallel(tasks, [callback])

Die Parallelfunktion führt mehrere Funktionen parallel aus. Jede Funktion wird sofort ausgeführt, ohne zuerst auf die Ausführung anderer Funktionen zu warten.
Die Daten im Array, die an den letzten Rückruf übergeben werden, sind in der in den Aufgaben angegebenen Reihenfolge und nicht in der Reihenfolge, in der die Ausführung abgeschlossen ist. Ein Beispiel ist wie folgt:

async.parallel([
  function(callback){
    callback(null, 'one');
  },
  function(callback){
    callback(null, 'two');
  }
],
function(err, results){

});

Der Aufgabenparameter kann ein Array oder ein JSON-Objekt sein, genau wie die Serienfunktion
Unterschiedliche Aufgabenparametertypen führen zu unterschiedlichen Formaten der zurückgegebenen Ergebnisse.

parallelLimit(tasks, limit, [callback])

Die parallelLimit-Funktion ähnelt parallel, verfügt jedoch über eine zusätzliche Parameterbegrenzung.
Der Limit-Parameter beschränkt Aufgaben auf eine bestimmte Anzahl gleichzeitiger Aufgaben und nicht auf unbegrenzte Parallelität. Das Beispiel lautet wie folgt:

async.parallelLimit([
  function(callback){
    callback(null, 'one');
  },
  function(callback){
    callback(null, 'two');
  }
],

2,

function(err, results){
  console.log(results);
});

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