gpt4 book ai didi

javascript - 尽管 async/await,nestJS Mongoose 回调在返回后仍被调用

转载 作者:行者123 更新时间:2023-12-02 22:07:49 24 4
gpt4 key购买 nike

我正在处理一个 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 中的空数组,经过一番分析后发现问题出在一个 block 中,该 block 似乎忽略了 async/await 语法。在下面的示例中,我首先在控制台中获得 ---2---,然后是 ---1---,这意味着 id 在由 insertMany 回调填充之前返回。

尽管在 Mongoose 方法上使用了await,为什么会发生这种情况?如何缓解?

最佳答案

如果您依赖回调,

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);

关于javascript - 尽管 async/await,nestJS Mongoose 回调在返回后仍被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59661543/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com