2017-08-17 1 views
0

nouveau à Node et de s'amuser, cependant, je rencontre un problème en essayant de transmettre des données à une fonction qui a deux arguments err/argTime. ex: function (err, argTime).Appel d'une fonction d'erreur en premier Noeud JS

Cela fonctionne pour moi:

queryTrigger(moment()); //the call 
//more code... 

function queryTrigger(argTime) { 
      console.log(argTime); 
     }; 

Cela ne fonctionne pas:

queryTrigger(moment()); //the call 
//more code... 

function queryTrigger(err, argTime) { 
     if(err) { 
      throw err; 
     } else { 
     console.log(argTime); 
     }; 
}; 

Toute idée est très apprécié!

+0

Dans le second cas, utilisez 'queryTrigger (null, moment());', car le premier paramètre est error. – alexmac

+0

Merci! C'était rapide et ça marche. Court suivi: est-ce une bonne pratique d'ajouter un argument d'erreur à une fonction simple comme celle-ci? – MangoHeat

+0

Habituellement paramètre 'error' utilisé dans la fonction asynchrone. Dans votre fonction, ce n'est pas nécessaire. – alexmac

Répondre

1

Vous devez transmettre une valeur comme erreur, mais dans le cas contraire, vous pouvez utiliser null ou undefined comme valeur (pour ne représenter aucune erreur).

// No error: 
queryTrigger(null, moment()); 

// Explicit error: 
queryTrigger((new Error('Error!')), moment()); 

// Variable error from function response: 
queryTrigger(isErrored(), moment()); 

En réponse à votre commentaire suivi, vous généralement seulement besoin de ce modèle lors de l'appel des fonctions asynchrones où l'erreur est déclenchée en dehors de la boucle principale de l'événement - si vous ne le faites pas, vous pouvez simplement utiliser try/catch pour gérer les erreurs.

Je ne suis pas d'accord avec l'énoncé de this answer en ce qui concerne les pratiques exemplaires; l'argument err est fondamentalement toujours le premier argument et est suivi par à peu près toutes les fonctions async dans stdlib avec la plupart des (bons) paquets sur GitHub/npm.

+0

J'ai ajouté du code à votre réponse, car je pense que c'est un bon aspect de l'autre réponse, même si je ne suis pas d'accord avec les meilleures pratiques. Semblait plus logique que d'écrire le mien –