【发布时间】:2019-09-24 23:07:39
【问题描述】:
问题
我正在使用 for 循环来创建和保存多个文档,然后将它们的 id 作为对另一个文档的引用推送,我稍后会尝试保存。
但是,当我执行代码时,最终的文档保存发生在 for 循环之前,这意味着永远不会保存引用。
如何在保存另一个文档(在我的例子中是条目)之前完成 for 循环?还是有完全不同的更好的方法来完成我想要完成的事情?
我尝试过的
我尝试将代码分成两个异步等待函数,我还尝试将代码分成一个带有回调的函数,该回调在完成后调用另一个函数。我目前正在尝试更深入地理解 Promises。我也在探索是否可以设置一个标志或一个小的时间延迟。
Template.findById(templateId, function (err, template) {
if (err) { return console.log(err) }
let entry = new Entry();
entry.entryState = "Draft";
entry.linkedTemplateId = template._id;
for (var i = 0; i < template.components.length; i++) {
let component = template.components[i]
let entryComp = new entryComponent({
componentOrder: component.componentOrder,
componentType: component.componentType,
templateComponentId: component._id,
entryId: entry._id
})
entryComp.save(function(err){
if (err) { return console.log(err) }
entry.entryComponents.push(entryComp._id);
});
}
entry.save(function(err){
if (err) { return console.log(err) }
});
})
【问题讨论】:
-
使用异步和等待。而不是 for 循环使用它。见下面链接lavrton.com/…
-
@sarvonks,会试试看,会在几分钟内回复你!
-
@sarvonks,如果我使用带有 Promise 的基于时间的延迟方法,它似乎适用于某些项目,有时,但不是所有项目。
标签: javascript node.js mongodb mongoose