我正在使用nestJS项目,并尝试返回插入对象的ID,以便以后可以将其用于填充其他对象中的引用。
try {
await this.projectModel.insertMany(newProjects, (err, addedProjects) => {
const addedProjectsIds = addedProjects.map(ap => {
return ap._id;
});
ids = ids.concat(addedProjectsIds);
console.log('-------1--------');
console.log(ids);
});
} catch(err) {
isSuccessful = false;
errorMessage = err.message;
}
console.log('---------2--------');
console.log(ids);
return { success: isSuccessful, message: errorMessage, result: ids };
我将始终收到一个添加到引用ID中的空数组,经过一番分析确定问题出在一个块中,这似乎忽略了async / await语法。在下面的示例中,我首先在控制台中得到--- 2 ---,然后是--- 1 ---,这意味着这些ID将在被insertMany回调填充之前返回。
尽管在猫鼬方法上使用了wait,这为什么会发生?我该如何缓解呢?
await
如果您依赖回调,将不起作用。据我所知,insertMany
returns a Promise-这就是await
可以使用的功能。试试这样的东西:
const addedProjects = await this.projectModel.insertMany(newProjects);
const addedProjectsIds = addedProjects.map(ap => {
return ap._id;
});
ids = ids.concat(addedProjectsIds);
console.log('-------1--------');
console.log(ids);