javascript - Mongoose 不会执行 findById 回调
问题描述
我开始失去理智了。为什么这个简单的猫鼬命令不起作用?由于架构更改,我正在编写一个脚本来更新数据库中的项目,无论出于何种原因,我都无法让实际的更新方法正常工作......就像这样。他们不会出错或任何事情。他们只是不执行。我的脚本中的其他所有内容(与数据库连接交互)都执行得很好。
这是我的代码的 jist:
const db = require('../../server/db');
async function itemMigration() {
const items = await db.Items.find().exec();
if (items) {
items.forEach( async item => {
console.log(item); // this works! It logs the item to my console.
// this doesn't do anything.
await db.Items.findById(item._id, (err, doc) => {
if (err) {
console.log(err)
}
console.log(item.type)
doc.set(item);
doc.save();
})
}
}
}
我期望这段代码做的是items
在我的数据库中找到所有内容,遍历它们,然后更新每一个。第一部分按预期工作。我得到项目并将每个项目记录到控制台。该findById()
部分是不执行的。我已经尝试过使用/不使用await
命令...没有区别。我应该在控制台上看到日志,但没有出现 ♂️♂️</p>
解决方案
等待异步函数时,不应提供回调函数。
这就是您的代码的样子:
try {
const doc = await db.Items.findById(item._id)
doc.set(item);
await doc.save();
} catch (error) {
console.error(item.type)
}
PS: 如果您希望以正确的顺序删除项目,只需使用常规async
并在其正文中删除。items.forEach( async item ...
for
await
推荐阅读
- javascript - 使用 autoNumeric.js 更新输入字段
- sql - NonUniqueResult 但实际上是一行
- android - 为什么 ScrollView 会自动滚动到屏幕底部?
- angular - 仅使用 html 元素引用禁用 p-dropdown
- python - pythons lambda可以用来改变另一个函数的内部工作吗?
- azure - 如何在不创建 DHL 或 Fedex 帐户的情况下将日志文件生成到天蓝色?
- apache - Apache 虚拟主机无法连接
- visual-studio-code - 如何从 VSCode 的 Watch 窗口中获取 String 变量的值?
- azure - 如何使用 Powershell 命令或 ARM 命令启动停止 azure 容器实例
- java - WildFly 开放过多端口