114 votes

Comment écrire des fonctions asynchrones pour Node.js

J'ai essayé de faire des recherches sur la façon dont les fonctions asynchrones doivent être écrites. Après avoir parcouru une grande quantité de documentation, je n'ai toujours pas compris.

Comment écrire des fonctions asynchrones pour Node ? Comment mettre en œuvre correctement la gestion des événements d'erreur ?

Une autre façon de poser ma question serait la suivante : Comment dois-je interpréter la fonction suivante ?

var async_function = function(val, callback){
    process.nextTick(function(){
        callback(val);
    });
};

Aussi, j'ai trouvé cette question sur le SO ("Comment puis-je créer une fonction asynchrone non bloquante dans node.js ?") intéressante. Je n'ai pas l'impression qu'on y ait encore répondu.

14 votes

C'est pour ça que je demande. Je ne vois pas en quoi ces fonctions sont différentes.

0 votes

Je vous recommande de regarder setTimeout y setInterval dans votre navigateur préféré et jouez avec eux également. Vous pouvez aussi utiliser des rappels ajax (ce qui se rapproche probablement le plus de l'expérience des nœuds), ou des écouteurs d'événements pour des choses qui vous sont familières, comme les événements de clic et de chargement. Le modèle asynchrone existe déjà dans le navigateur, et c'est exactement la même chose dans node.

0 votes

@davin - Je suppose que je ne comprends pas bien le modèle asynchrone alors.

0voto

Yoarthur Points 714

J'ai consacré trop d'heures à ce genre de tâche pour node.js. Je suis principalement un gars du front-end.

Je trouve cela assez important, parce que toutes les méthodes de nœuds asynchrones traitent du callback, et le transformer en Promise est mieux pour le gérer.

Je veux juste montrer un résultat possible, plus simple et plus lisible. En utilisant ECMA-6 avec async, vous pouvez l'écrire comme ceci.

 async function getNameFiles (dirname) {
  return new Promise((resolve, reject) => {
    fs.readdir(dirname, (err, filenames) => {
      err !== (undefined || null) ? reject(err) : resolve(filenames)
    })
  })
}

le site (undefined || null) est pour repl (lire événement imprimer boucle) scénarios, l'utilisation d'undefined fonctionne également.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X