Асинхронная функция, возвращающая неопределенный в NodeJS - PullRequest
0 голосов
/ 02 октября 2019

Итак, я новичок, пытаясь понять, как работают асинхронные функции. Делать это с "Разрешить, отклонить" из обещаний, работает нормально. Но когда я пытаюсь применить его с помощью async вместо нового Promise, по какой-то причине функция возвращает undefined. Вот мой код:)

примечание: извините за мой английский, не свободно говорящий:)


   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 ]

2 голосов
/ 02 октября 2019

Вам не нужно использовать функцию callback при использовании async/await

Попробуйте этот код:

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
}
0 голосов
/ 02 октября 2019

obtenerCategoria не имеет возвращаемого значения. Кроме того, вы можете использовать await для вызова Categoryoria.findOne () и использовать try / catch вместо вызова exec (), что-то вроде в этом примере.

...