Mongoose发现在异步函数内不工作

yhqotfr8  于 2023-02-19  发布在  Go
关注(0)|答案(1)|浏览(124)

我推荐了这个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]);
};

我试着做一些事情,但它确实起作用了。提前感谢。

vkc1a9a2

vkc1a9a21#

似乎有 * 两个问题 *。一个是您的MongoDB调用在模型前面没有db,如examples show
而不是这个:
await Book.find()
您应该使用这个方法并确保您的DB已经示例化:
await db.Book.find
除此之外,您应该在getList上使用await,因为您需要等待try/catch块中的承诺。

相关问题