In order to make orderEmployees
behave like async functions, you have to return the resulting promise. There are two rules to follow when using promises without async/await
keywords:
- A function is asynchronous if it returns a
Promise
- If you have a promise (for example returned by an async function) you must either call
.then
on it or return it.
When you are using async/await
then you must await
on promises you obtain.
This said you will notice that you do not return the promise generated inside orderEmployees
. Easy to fix, but its also easy to rewrite that function to async too.
orderEmployees: (companyID) => {
return User.find({company:companyID}) // Notice the return here
.exec()
.then((employees) => {
// FIRST CONSOLE.LOG
console.log(employees);
return employees;
})
.catch((err) => {
return 'error occured';
});
},
or
orderEmployees: async(companyID) => {
try {
const employees = await User.find({company:companyID}).exec();
console.log(employees);
return employees;
} catch (err) {
return 'error occured';
}
},
PS: the error handling is somewhat flawed here. We usually do not handle errors by returning an error string from a function. It is better to have the error propagate in this case, and handle it from some top-level, UI code.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…