提问者:小点点

在NodeJS中返回未定义的异步函数


所以,我想了解异步函数是如何工作的。用“决心,拒绝”的承诺去做,效果很好。但是当我尝试用async而不是new Promise应用它时,由于某种原因,函数返回未定义。下面是我的代码:)

注:对不起,我的英语,不是一个流利的发言者:)


   category = body.category

   obtenerCategoria = async(category) => {
     Categoria.findOne({ descripcion: category })
       .exec((err, categoriaDB) => {
         if (err) {
           throw new Error(err)
         }
         if (!categoriaDB) {
           return res.status(400).json({
             ok: false,
             msg: 'Categoria no encontrada'
           })
         }
         console.log(categoriaDB); // Works fine here
         return categoriaDB
       })
   }


   crearClase = async() => {
     categoria = await obtenerCategoria(category);
     console.log(categoria); //getting nothing here
   }

   crearClase()
     .then()
     .catch(e => {
       return e
     })

共2个答案

匿名用户

使用时不需要使用函数

请尝试以下代码:

obtenerCategoria = async(category) => {
    const categoriaDB = await Categoria.findOne({ descripcion: category });
    if (!categoriaDB) {
        return res.status(400).json({
            ok: false,
            msg: 'Categoria no encontrada'
        })
    }
    console.log(categoriaDB); // Works fine here
    return categoriaDB
}

匿名用户

obtenerCategoria没有返回值。另外,您可以在categoria.findone()调用上使用await,并使用try/catch代替对exec()的调用,类似于这个示例。