【发布时间】:2018-01-05 22:02:05
【问题描述】:
我正在尝试引用 MongoDB 中的文档。我试图在实际调用数据库之前先创建要插入的文档。我用过
const venues = [
new Venue({ name: 'A' }),
];
const events = [
new Event({
name: 'B',
venue: venues[0]._id
})
];
但似乎venues[0]._id 是null。
如果我使用console.log(venues),我确实得到了我想要的数组,所以它不应该说null。
我担心这是由于异步调用而发生的,即 const venues = ... 行在启动 const events = ... 代码行之前没有完成。
我可以做些什么来确保const venues = ... 在下一行引用数组之前完成?
编辑
实际上,如果我使用console.log(events),我发现它可以正常工作。
但是当我使用时
Promise.all([Venue.create(venues), Event.create(events)]).then(() => { .. });
会场变成null。
【问题讨论】:
-
我认为您的意思是“异步调用”,因为“同步”意味着它立即返回,而另一个则没有。为什么这些调用是“异步的”?这些看起来就像标准的类构造函数。也许是猫鼬?如果那是来自模型实例的创建,那么它不是“异步”的。如果它实际上是猫鼬,那么
null很可能是因为定义的实际模式与您尝试提供的数据不同。ObjectId在实际架构上的可能“参考”。请解释/详细说明。 -
嗯,Edit 与“新建”实例构造函数完全不同。显示实际代码和您打算做什么。当您调用
.create()时,它是异步的
标签: javascript node.js asynchronous mongoose