我推荐了这个stack overflow solution,但它仍然没有帮助我。
我有一个find方法,它在控制器中可以完美地工作,但在异步函数中却不能工作。
下面是我在server.js中调用这个函数的cron作业:
// this performs the job everyday at 10:00 am
cron.schedule("00 10 * * *",async function () {
await notifyBookDefaulties();
});
下面是我的异步函数:
const notifyBookDefaulties = async () => {
console.log("Start");
const getList = async () => {
console.log("Fetching");
const books = await Book.find({"users.dueDate": { $lt: new Date().toISOString() }});
console.log(books);
console.log("Fetched");
};
try {
getList();
console.log("completed");
} catch (error) {
console.log(error);
}
console.log("End");
};
执行后,我在控制台中看到以下输出:
Start
Fetching
completed
End
如果我使用await getList()
,那么我会在控制台中得到以下输出:
Start
Fetching
下面是我的控制器,工作正常,获取所需的文档:
const dueBooks = async (req, res) => {
const result = await Book.find({"users.dueDate": { $lt: new Date().toISOString() }});
res.status(200).json(result[0]);
};
我试着做一些事情,但它确实起作用了。提前感谢。
1条答案
按热度按时间vkc1a9a21#
似乎有 * 两个问题 *。一个是您的MongoDB调用在模型前面没有
db
,如examples show。而不是这个:
await Book.find()
您应该使用这个方法并确保您的DB已经示例化:
await db.Book.find
除此之外,您应该在
getList
上使用await
,因为您需要等待try
/catch
块中的承诺。