我正在尝试引用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
。
答案 0 :(得分:0)
您的代码缺少实际将Venue
对象保存到数据库的部分(意味着调用MongoDB' insert
函数)。除非您保存它,或手动提供_id
属性,否则该属性将保持未定义状态。这与同步\异步代码无关。
编辑:
当您将venues[0]._id
分配给新Event对象的venue
属性时,它尚未定义,因为您尚未调用create
函数。你应该做的是:
_id
。等待完成可以通过多种方式完成:
.then(...)
功能await
承诺这一切都取决于你的口味和你正在使用的工具。
最重要的是,请注意Promise.all
会立即执行数组中的所有承诺,因此在这种情况下您无法使用它。