【问题标题】:express error handling promises表达错误处理承诺
【发布时间】:2018-09-18 23:18:49
【问题描述】:

当jobs为null时,错误被处理,但在它继续到promise链之后。当出现错误时我如何打破promise链?我使用默认的快速错误处理程序。

search.route('/:job/:lng/:lat')
.get((req, res, next) => { 
   Jobs.findOne({"names":req.params.job})
  .then((job) => {
    if(!job){
      err = new Error("Job "+req.params.job+" doesnt exist...Will look on it");
      err.status = 404;
      return next(err);
    }
    else{
    return(job.id);
    }

    }, (err) => next(err))
  .then((jobId) => {
   return( 
      Professionals.aggregate([

      { "$geoNear": {
          "near": {
              "type": "Point",
              "coordinates": [Number(req.params.lng),Number(req.params.lat)]
          },
          "distanceField": "distance",
          "spherical": true,
          "maxDistance": maxDistance

      }}]

    ) 
  );

  }, (err) => next(err))
  .then((pros) => {
      for(i=0;i <= pros.length -1;i++){
        if(pros[i].distance > pros[i].location.radius ){
          pros.splice(i,1); 

        }

      }

      res.statusCode = 200;
      res.setHeader('Content-Type', 'application/json');
      res.json(pros);
  }, (err) => next(err))
  .catch((err) => next(err));

});

提前致谢!!

【问题讨论】:

  • 您不应将(err) =&gt; next(err) 传递给每个then 回调。最后捕获一次错误。

标签: node.js express mongoose promise


【解决方案1】:

使用throw,这正是这种情况。当你创建一个新的 Promise 时,你应该使用拒绝:

new Promise((resolve, reject) => reject());

【讨论】:

  • 我尝试替换 return next(err);抛出“错误”;问题在于
猜你喜欢
  • 2015-07-29
  • 1970-01-01
  • 1970-01-01
  • 2018-06-01
  • 2015-07-03
  • 1970-01-01
  • 2020-07-01
  • 2021-04-30
  • 2020-04-11
相关资源
最近更新 更多