【发布时间】:2021-12-19 01:36:54
【问题描述】:
所以我是 Node.js 的新手,并且一直在检查它的 mongoose 包。我有一个带有字段名称=“测试条目”的文档的 mongodb 集合 我已经尝试对一个封装在超时内、封装在函数中的模型执行 .findOneAndDelete() 方法调用。
让我困惑的一个问题是为什么这段代码
function deleteEntry() {
setTimeout(function () {
Test_Model.findOneAndDelete({
name: "Test Entry",
});
}, 5000);
}
deleteEntry();
不删除 mongodb 中的条目
而
function deleteEntry() {
setTimeout(async function () {
await Test_Model.findOneAndDelete({
name: "Test Entry",
});
}, 5000);
}
deleteEntry();
这个可以。
除非有某种回调,否则 mongoose 方法不会执行。不管是不是为了虚荣? 有人提到过类似的东西 in the documentation 。是不是只有在有callback/await/then的时候才会真正执行命令?
【问题讨论】:
-
实际上这两个例子确实从数据库中删除了文档。两个例子没有区别,两个例子都不返回任何承诺,也不接受回调,所以也许你可能会在实际文档被删除之前读取数据库..
-
感谢您的回复!我正在使用 mongodb compass 查看数据库集合并验证结果。删除发生在后者而不是前者,我可以具体断言。从文档中我对 mongodb 查询对象的理解是它们有一个 .then() 方法并且可以传递回调。并且在此类辅助函数上重复传递回调或使用 await/.then() 也可以触发执行。但正如你所说。为什么不调用这个操作不会触发任务?
-
@Nur 正如你所说,虽然我的第一印象是类似的,但条目在代码执行之外仍然存在。
标签: node.js asynchronous mongoose