首页 > 解决方案 > mongoose Model.save() 在 NodeJS 中返回空数据

问题描述

我正在尝试通过在 NodeJS 中使用 mongoose v5.6.3 将产品文档添加到 MongoDB,但在回调函数中,它无法将结果分配给返回值。

这是我的功能:

public async addProduct(productInfo: Product) {
        let result = null;

        let newProduct = new ProductModel(productInfo);
        newProduct.uuid = id();

        await newProduct.save(async (err,product) => {
            if(err){
                throw new ProductCreateError();
            }
            result = product;
        });
        return result;
    }

请注意,Product 和 ProductModel 在参数方面不同但相同。Product 是一个接口,ProductModel 是一个猫鼬模型。

当这个函数被调用时,它返回'result'的初始值

由于异步/等待可能会出现问题,但我不确定。我怎样才能解决这个问题?

标签: node.jsasynchronousmongoose

解决方案


由于 save() 是一个异步任务,它总是返回 null。该函数将在返回产品之前返回 null。

将代码修改为

public async addProduct(productInfo: Product) {
let result = null;
  try {
    let newProduct = new ProductModel(productInfo);
    newProduct.uuid = id();
    result = await newProduct.save();
  } catch (e) {
    throw new ProductCreateError();
  }
}

试试这个代码,让我知道。


推荐阅读