Mit Mungo verspricht mit async/await
Ich versuche, den Dreh raus mit Mungo verspricht mit dem async/await-Funktionalität Node.js. Wenn meine Funktion printEmployees
heißt ich möchten, speichern Sie die Liste der Mitarbeiter, die abgefragt werden, indem die orderEmployees
Funktion. Während die console.log
Anweisung innerhalb orderEmployees
gibt die erwartete Abfrage, die console.log
innerhalb von printEmployees
zurück undefined
, was darauf hindeutet, dass ich nicht wieder das Versprechen, richtig.
Ich bin neu verspricht also durchaus möglich, dass ich nicht richtig verstehen das Paradigma... jede Hilfe wird sehr geschätzt.
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';
});
},
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie
return
IhrePromise
, sonst sind Sie wartet auf eine Funktion zurückgibt, dieundefined
.Aktuell, Sie sind in Erwartung einer nicht-Versprechen, also der nächsten Zeile code ausgeführt wird sofort; bevor die Versprechen, die Sie wirklich wollen, zu erwarten, tatsächlich behebt.
Um
orderEmployees
Verhalten sich wie die async Funktionen, die Sie haben, um die Rückkehr der daraus resultierende Versprechen. Es gibt zwei Regeln zu Folgen, wenn man mit Versprechungen ohneasync/await
keywords:Promise
.then
auf es oder gibt es zurück.Wenn Sie mit
async/await
dann mussawait
auf Versprechen, die Sie erhalten.Dieser sagte, werden Sie feststellen, dass Sie nicht wieder das Versprechen erzeugt im inneren
orderEmployees
. Einfach zu lösen, aber es ist auch einfach zu umschreiben, dass die Funktion async zu.oder
PS: die Fehlerbehandlung ist etwas mangelhaft hier. Wir in der Regel nicht behandelt Fehler, die durch einen Fehler-string aus einer Funktion. Es ist besser, den Fehler zu propagieren, in diesem Fall, und handle es von einigen top-level-UI-code.
Sind Sie nicht wieder ein Versprechen von orderEmployees.
Müssen Sie zurückgeben
Promise
ausorderEmployees
Wenn Sie wollen, um einige Fehler-handling oder pre-processing bevor Sie zurückkehren, dann können Sie halten Ihr code ist, sondern nur daran erinnern, um das Ergebnis zurückzugeben (Versprechungen sind verkettbare).
return employees
undthrow e
aus einem einfachen asynchronen Funktion.