【问题标题】:Async function returning undefined in NodeJS在 NodeJS 中返回未定义的异步函数
【发布时间】:2020-01-31 13:28:54
【问题描述】:

所以,我是新手,想了解异步函数的工作原理。使用 Promises 中的“解决,拒绝”来做这件事,效果很好。但是当我尝试使用 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
     })

【问题讨论】:

  • obtenerCategoria 不返回任何内容,crearClase 也不返回任何内容
  • return Categoria.findOne(...)

标签: javascript node.js asynchronous async-await


【解决方案1】:

使用async/await时不需要使用callback函数

试试这个代码:

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
}

【讨论】:

    【解决方案2】:

    obtenerCategoria 没有返回值。此外,您可以在 Categoria.findOne() 调用上使用 await 并使用 try / catch 代替对 exec() 的调用,例如 this 示例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-07
      • 1970-01-01
      • 1970-01-01
      • 2018-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多