在express.js中,当我使用promises时,我是否需要在执行程序中包含reject()?

时间:2017-07-26 06:34:14

标签: javascript node.js express

在我们不处理拒绝的情况下,我们是否必须在承诺执行人中包含拒绝?

例如:

 new promise ((res)=>{
   res(a);
 })

2 个答案:

答案 0 :(得分:0)

没有必要,不,但这不是一种非常优雅的方式来处理错误 - 如果在您的承诺未决时抛出错误,您将需要采取其他行动并拒绝承诺,让用户知道什么是错。

看看MDN Promise Docs,他们很好地解释了在Promise中处理错误的概念!

答案 1 :(得分:0)

如果您知道承诺永远不会被拒绝,则无需添加拒绝处理程序。例如。很明显,这永远不会被拒绝,添加拒绝处理程序将是非常愚蠢的:

Promise.resolve("abc")
    .then(result => console.log(result));

在所有其他情况下,不提供拒绝处理程序与在try - catch中不包含丢失错误的代码几乎相同。当然,这可能是有意的,但请记住,node.js会将未处理的promise拒绝视为未被捕获的错误:通过终止node.js进程。当发生未处理的承诺拒绝时,这就是它在控制台上所说的内容:

  

(node:7741)弃用警告:不推荐使用未处理的拒绝承诺。将来,未处理的承诺拒绝将使用非零退出代码终止Node.js进程。

所以,总结一下:

  • 当你知道拒绝是不可能的时候,跳过拒绝处理程序,
  • 当您要求在拒绝时终止应用程序(在Node.js的未来版本中)时跳过拒绝处理程序,
  • 在所有其他情况下写拒绝处理程序。
编辑(编辑后问题变得更加清晰,因此我对答案的更新):

至于在承诺执行者中包含reject()调用,不,您不需要添加它。但是,您必须确保内部逻辑确保始终调用resolve()