À l'aide de la mangouste promesses avec async/await
Je suis en train d'essayer d'obtenir le coup de l'utilisation de la Mangouste promesses avec les async/await fonctionnalité de Node.js. Lors de ma fonction printEmployees
est appelé, je veux enregistrer la liste des employés qui sont interrogés par la orderEmployees
fonction. Tandis que, le console.log
déclaration à l'intérieur de orderEmployees
les retours attendus de la requête, le console.log
à l'intérieur de printEmployees
retourne undefined
, ce qui suggère que je ne suis pas de retour la promesse correctement.
Je suis nouveau sur promet donc tout à fait possible que je ne suis pas une juste compréhension du paradigme... toute aide est très appréciée.
printEmployees: async(company) => {
var employees = await self.orderEmployees(company);
//SECOND CONSOLE.LOG
console.log(employees);
},
orderEmployees: (companyID) => {
User.find({company:companyID})
.exec()
.then((employees) => {
//FIRST CONSOLE.LOG
console.log(employees);
return employees;
})
.catch((err) => {
return 'error occured';
});
},
OriginalL'auteur Patrick Connors | 2017-09-27
Vous devez vous connecter pour publier un commentaire.
Vous devez
return
votrePromise
, sinon que vous êtes en attente sur une fonction qui retourneundefined
.Vous ne pouvez
await
Promesses; ou une fonction marquéeasync
, qui renvoie unePromise
.OriginalL'auteur Nik Kyriakides
Afin de rendre
orderEmployees
se comportent comme des async fonctions, vous devez retourner l'résultant de la promesse. Il y a deux règles à suivre lors de l'utilisation de promesses sansasync/await
mots-clés:Promise
.then
sur ou le retourner.Lorsque vous utilisez
async/await
alors vous doitawait
sur des promesses que vous obtenez.Cela dit, vous remarquerez que vous ne retournez pas la promesse généré à l'intérieur de
orderEmployees
. Facile à fixer, mais il est aussi facile de réécrire cette fonction async trop.ou
PS: la gestion des erreurs est quelque peu faussée ici. Nous avons l'habitude de ne pas gérer les erreurs en renvoyant une erreur de chaîne à partir d'une fonction. Il est préférable d'avoir l'erreur se propager dans ce cas, et de les traiter de " haut-niveau, le code de l'INTERFACE utilisateur.
OriginalL'auteur Tamas Hegedus
Vous n'êtes pas en retour d'une Promesse de orderEmployees.
OriginalL'auteur barnski
Vous avez besoin de retourner un
Promise
deorderEmployees
Si vous voulez faire une gestion d'erreur ou de pré-traitement avant d'y retourner, alors vous pouvez garder votre code est aussi, mais n'oubliez pas de retourner le résultat (les promesses sont chainable).
return employees
etthrow e
à partir d'une simple fonction async.ouais bon point, vieille habitude du temps où le Noeud n'a pas de poignée de lever des exceptions bien de l'intérieur promet!
OriginalL'auteur James