所以,我想了解异步函数是如何工作的。用“决心,拒绝”的承诺去做,效果很好。但是当我尝试用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 = 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()的调用,类似于这个示例。