我在mongoose中使用回调函数时遇到问题。
Client.findOne({remarks}, (error, docs) => {
if(error){
//logging error to DB
return next(error)
}
if(docs){
return next(new ErrorResponse(IdenticalRemarksError, 400))
}
})
Client.create(
{ fullname, email, telephone, country, city, remarks },
(error, docs) => {
if(error){
return next(error)
}
res.status(201).json({
success: true,
data: docs
})
}
);
在Client.findOne()回调中的返回并没有结束整个注册控制器,即Client.create()仍然在运行。我知道这是因为返回是Client.findOne()的本地返回。
什么是最好的重组方法,使Client.findOne()中if(docs){}内的return语句结束整个控制器函数,而不产生async await?即如果在findOne()方法中发现一个注解,则不会创建客户端?
2条答案
按热度按时间kpbwa7wx1#
溶液1
您可以将
Client.create()
部分放在Client.findOne()
的回调内,如果没有错误,则执行它。溶液2
不要使用回调,而是使用
async/await
,这将使您的代码更具可读性。注意:我知道你写了你不想要
async/await
,但是我把它作为第二个解决方案添加进来,这样你就可以比较代码的可读性。qyzbxkaa2#
请尝试以下代码: