Javascript 在express.js中,当我使用承诺时,是否需要在executor中包含reject()?
在我们不处理拒绝的情况下,我们必须在承诺执行人中包含拒绝吗 例如:Javascript 在express.js中,当我使用承诺时,是否需要在executor中包含reject()?,javascript,node.js,express,Javascript,Node.js,Express,在我们不处理拒绝的情况下,我们必须在承诺执行人中包含拒绝吗 例如: new promise ((res)=>{ res(a); }) 没有必要,但这不是一种处理错误的非常优雅的方式-如果在您的承诺待定时抛出错误,您将希望采取其他操作并拒绝承诺,让用户知道哪里出了问题 看一看,他们很好地解释了处理承诺中错误的概念 如果您知道承诺永远不会被拒绝,则无需添加拒绝处理程序。例如,很明显,这将永远不会被拒绝,添加拒绝处理程序显然是愚蠢的: Promise.resolve("abc")
new promise ((res)=>{
res(a);
})
没有必要,但这不是一种处理错误的非常优雅的方式-如果在您的承诺待定时抛出错误,您将希望采取其他操作并拒绝承诺,让用户知道哪里出了问题
看一看,他们很好地解释了处理承诺中错误的概念 如果您知道承诺永远不会被拒绝,则无需添加拒绝处理程序。例如,很明显,这将永远不会被拒绝,添加拒绝处理程序显然是愚蠢的:
Promise.resolve("abc")
.then(result => console.log(result));
在所有其他情况下,不提供拒绝处理程序与不在try
-catch
中包装抛出错误的代码片段几乎是一样的。当然,这可能是有意的,但请记住,node.js会将未处理的承诺拒绝视为未捕获的错误:通过终止node.js进程。当发生未处理的承诺拒绝时,控制台上会这样说:
(节点:7741)弃用警告:未处理的承诺拒绝已弃用。将来,未处理的承诺拒绝将使用非零退出代码终止Node.js进程
综上所述:
- 当您知道不可能拒绝时,跳过拒绝处理程序
- 当您要求在拒绝时终止应用程序时,跳过拒绝处理程序(在Node.js的未来版本中)
- 在所有其他情况下编写拒绝处理程序
至于在承诺执行器中包含
reject()
调用,不需要添加。同样,您必须确保内部逻辑保证始终调用resolve()
。看看这个:您能重新命名您的标题吗?@davidfarugia,谢谢,这是一篇好文章!谢谢回复!