尽管异步/等待,但仍在返回后调用nestJS Mongoose回调

时间:2020-01-09 10:06:04

标签: javascript node.js typescript mongoose async-await

我正在使用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回调填充之前返回。

为什么在mongoose方法上使用了wait,为什么会发生这种情况?我该如何缓解呢?

1 个答案:

答案 0 :(得分:1)

如果您依赖回调,则

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