58
|
Benjamin Gruenbaum · 技术社区 · 6 年前 |
1
53
为什么旧代码会这样做?历史上,较老的(2013年以前)承诺图书馆“吞并”了未经处理的承诺拒绝,而您没有亲自处理。从那以后,任何书面的事情都不是这样的。 今天发生了什么?浏览器和node.js已经自动记录未捕获的承诺拒绝或具有处理它们的行为,并将自动记录它们。
此外-通过添加
在编写异步代码时,人们应该问自己的问题通常是“同步版本的代码会做什么?”以下内容:
我认为消费者不会期望此功能返回
所以,总而言之,这是不受欢迎的,因为它让应用程序流中的开发人员吃惊,浏览器记录了今天未捕获的承诺错误。 相反,该怎么做:没有什么。 这就是它的美妙之处-如果你写:
首先,你会得到更好的错误。 无论如何 :) 如果我运行的是旧版本的node.js,该怎么办?
旧版本的node.js可能不会记录错误或显示拒绝警告。在这些版本中,您可以使用
|
2
13
它会兑现一个承诺
就其本身而言,捕获错误并将其记录在Promise链的末尾是可以的:
但是,如果
从历史上看,人们害怕承诺错误在任何地方都不会得到处理,从而导致它们完全消失——被承诺“吞没”。所以他们补充说
这不再是必需的,因为所有现代Promise实现都可以检测到未处理的Promise拒绝,并将在控制台上触发警告。 当然,仍然有必要(或者至少是良好的实践,即使你不希望任何事情失败)发现错误。 最后 承诺链(当你不再返回承诺时)。
在函数中,
这也大大简化了代码:
如果您坚持使用拒绝原因(记录、修改信息)进行操作,请确保重新抛出错误:
如果您正在处理某些错误,则相同:
|
3
3
你不应该这样做的原因
启示
处理承诺拒绝总是一个很好的实践,但我们应该始终使用
|
4
2
错误太普通了,它是一个catch all,但操作失败的原因太多,错误就是所有的错误都是somethingspecific给出的粒度 |
5
0
这里最通用的语句是不适用于Javascript以外的语言 抓住 '错误,除非您计划' 手柄 '错误。日志记录是 不 处理。 也就是说,一般来说,最好的(只有?)catch的原因是处理 建设性的 允许代码继续运行而不出现任何问题的方式。再说一次,一系列的伐木可能永远也无法做到这一点… |
Softly · 单选按钮未按预期取值 1 年前 |
SlickRed · 我无法使用JS关注HTML元素 1 年前 |
assembler · Nextjs没有处理发布请求 1 年前 |
BADRUM · 执行两个获取功能后,如何导航回页面? 1 年前 |
Toniq · javascript为php保存多维数组 1 年前 |