Maison >interface Web >js tutoriel >Une brève discussion sur la programmation asynchrone asynchrone dans node.js_node.js

Une brève discussion sur la programmation asynchrone asynchrone dans node.js_node.js

WBOY
WBOYoriginal
2016-05-16 15:35:461102parcourir

1. Qu'est-ce que la programmation asynchrone ?

La programmation asynchrone fait référence au moment où les résultats d'exécution ne peuvent pas être obtenus de manière synchrone en raison d'E/S asynchrones et d'autres facteurs,
Le style de codage pour effectuer l'opération suivante dans la fonction de rappel, les plus courantes telles que la fonction setTimeout, la requête ajax, etc.

Exemple :

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

La plupart des gens ici penseront que la sortie est de 123 ou 333. En fait, il affichera 444

Voici de quoi nous parlons de programmation asynchrone.

Définition des fonctions avancées

Pourquoi parlons-nous ici de fonctions de haut niveau ? Parce que les fonctions de haut niveau sont la base de la programmation asynchrone.

Alors, que sont les fonctions avancées ?
En fait, les fonctions avancées prennent des fonctions comme paramètres ou comme valeurs de retour.

Exemple :

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

Ce qui précède consiste à utiliser une fonction comme valeur de retour.

2. Contrôle des processus

Les fonctions sont :
série
cascade
parallèle
limiteParallèle

fonction série exécution en série

Sa fonction est de l'exécuter en séquence.

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

Sortie : {un : 1, deux : 2}

Le premier paramètre de la fonction série peut être un tableau ou un objet JSON,
Différents types de paramètres affectent le format des données renvoyées.

fonction cascade débit cascade

Les fonctions cascade et série présentent de nombreuses similitudes, les deux sont exécutées dans l'ordre.
La différence est que la valeur générée par chaque fonction en cascade sera transmise à la fonction suivante, alors que la série n'a pas cette fonction. Un exemple est le suivant :

.
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);
});

Il convient également de noter que le paramètre tâches de Waterfall ne peut être que de type tableau.
Lorsqu'une erreur de fonction se produit au milieu, son erreur est directement transmise au rappel final, le résultat est ignoré et les fonctions suivantes ne sont plus exécutées.

parallèle (tâches, [rappel])

La fonction parallèle exécute plusieurs fonctions en parallèle. Chaque fonction est exécutée immédiatement sans attendre que les autres fonctions soient exécutées en premier.
Les données du tableau transmises au rappel final sont dans l'ordre déclaré dans les tâches, plutôt que dans l'ordre dans lequel l'exécution est terminée. Un exemple est le suivant :

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

});

Le paramètre tâches peut être un tableau ou un objet json, le même que la fonction série,
Différents types de paramètres de tâches entraîneront différents formats de résultats renvoyés.

parallelLimit(tâches, limite, [rappel])

La fonction parallelLimit est similaire à parallel, mais elle a une limite de paramètre supplémentaire.
Le paramètre limit limite les tâches à un certain nombre de tâches simultanées, plutôt qu'à une concurrence illimitée. L'exemple est le suivant :

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

2,

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

Déclaration:
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