【问题标题】:nodejs keeps loading when Unhandled Promise Rejection Error未处理的承诺拒绝错误时nodejs继续加载
【发布时间】:2017-09-09 16:02:00
【问题描述】:

我是 nodeJS 的新手,我正在尝试根据请求参数选择一个单板

router.get('/board/:id', gettingSingleBoard); 

这是获取单板功能

gettingSingleBoard = async function (req, res) {
  const id = req.params.id;
  const board = await Board.findOne({ _id: id });
  res.json(board);
};

当我使用有效 ID 搜索时,它运行良好,但是当我尝试输入未退出控制台日志“UnhandledPromiseRejectionWarning:未处理的承诺拒绝”的 ID 时,它会继续加载并且不会返回错误或其他内容

【问题讨论】:

  • 只需try-catch 代码,以便明确异常处理。
  • gettingSingleBoard.catch(errorHandler); 你为什么不这样做?
  • 当使用await 时,你必须用try/catch 包围它以捕获被拒绝的承诺,或者gettingSingleBoard() 的调用者必须捕获被拒绝的承诺并在那里处理错误。您已经完全“避免”了适当的错误处理,因此当出现错误时,您不应该对它的行为不符合预期感到惊讶。

标签: javascript node.js


【解决方案1】:

您需要使用 try/catch 包装您的异步代码。看例子:

gettingSingleBoard = async function (req, res) {
  const id = req.params.id;
  try {
      const board = await Board.findOne({ _id: id });
      res.json(board); 
  } catch(e) {
      res.status(404).send({type: "NotFoundException"})
  }
};

【讨论】:

    【解决方案2】:

    另一种可能性是将错误捕获到错误对象:

    res.json(
      await Board
              .findOne({ _id: id })
              .catch(e=>({error:500,message:e}))
    );
    

    【讨论】:

      猜你喜欢
      • 2018-04-01
      • 2019-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多