nestJS Mongoose回调在返回后仍被调用,尽管异步/等待[重复]

问题描述 投票:0回答:1

我正在使用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,这为什么会发生?我该如何缓解呢?

javascript node.js typescript mongoose async-await
1个回答
0
投票

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);
© www.soinside.com 2019 - 2024. All rights reserved.