猫鼬中的同步和异步vs回调

时间:2019-05-27 03:18:25

标签: javascript node.js mongodb asynchronous mongoose

嗨,我是Node的新手,有一个简单的问题,这两个被截断之间有什么区别

注意:我知道异步/等待功能,并且在前端应用程序中,处理异步动作的最佳实践是,但是在使用猫鼬的节点中,我想知道哪种方法更适合处理

第一个解决方案

// for example we pass this function as controller to route handler

exports.myController = async (req, res, next) => {

try {
     const data = await Model.find();
     const some = await new Model(data).save();
   } catch(e) {

    next(e);
 }
}

第二种解决方案

exports.myController = (req, res, next) => {

 const data = Model.find((err, data_) => {

  const some = new Model(data_);
  some.save((err, result) => {
  ....
})

});

}


我想知道我何时遇到猫鼬错误,以第二种方式可以抛出这样的错误

// in callback function 

if (err) {

throw Error();

}

但是我该如何在async/await解决方案中解决

1 个答案:

答案 0 :(得分:1)

您只需将其扔出或将其记录在您的catch块中:

try {
     const data = await Model.find();
     const some = await new Model(data).save();
   } catch(e) {
     throw e; 
     next(e);
 }

async / await的工作方式类似于promise,但没有嵌套回调,并且它会引发与第一个错误同步的错误,并停止执行其他行。

基于已编辑的注释:
您应该始终使用Node.js中的异步解决方案,甚至是与javascript相关的任何事物,这都是最好的可组合和可重用的解决方案。