- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在学习 Promises,以便在尝试使用 Firebase 之前能够更好地理解。我是新手,我一直在阅读有关 catch()
的以下内容:
catch()
catch()
和 then()
的区别的问题根据我所阅读的内容,我得出以下结论:
catch()
在每个 Promise 链中都是必需的,以防发生“意外异常”。我的then
的failureHandler
似乎可以检测到这些“意外异常”。但是,它无法区分“正常故障”和这些类型的故障。我假设这些“意外异常”之一是当您尝试访问 null
元素的某些属性时。then(successHandler, failureHandler)
然后继续 catch()
block 以允许更好的控制,如 link two 中所述.当我想在某些事情失败时做其他事情(在这种情况下是“正常失败”,而不是“意外异常”)并将被拒绝的 Promise 传递给下一个 then
进行处理时,这很有用,因此可能产生与失败部分成功的结果截然不同的结果。如果在我的 successHandler
或 failureHandler
中发生故障,我还可以通过在链的末尾使用 catch()
来捕获“意外异常”。 从我的结论中可以看出,我对可能发生的错误知之甚少。我提到 null
异常是“意外异常”的例子之一(这个假设是否正确?)。但是,failureHandler
检测到哪些其他错误以及 catch()
检测到哪些其他“意外异常”?
我在上面还提到,[then
] 无法区分正常故障和这些类型的故障。那是对的吗?如果是,为什么它很重要?
编辑
在阅读更多内容后,似乎如果一个 Promise 在链的顶部被拒绝,则随后的 then
将被忽略,我立即转到 catch()
block 。这意味着我上面的结论:当我想在某些事情失败时做其他事情并将被拒绝的 Promise 传递给下一个 then
处理时,这很有用/强 > 不正确。如果是这样的话,如果我的链的末尾已经有一个 catch()
,那么我的每个 then< 就不再需要一个
block 。但是,在链接三中提到了:failureHandler
/
The argument is that usually you want to catch errors in every step of the processing, and that you shouldn't use it in chains. The expectation is that you only have one final handler which handles all errors - while, when you use the "antipattern", errors in some of the then-callbacks are not handled.
However, this pattern is actually very useful: When you want to handle errors that happened in exactly this step, and you want to do something entirely different when no error happened - i.e. when the error is unrecoverable. Be aware that this is branching your control flow. Of course, this is sometimes desired.
我的结论是被拒绝的Promise会被传递给下一个then
来处理,因为我看了上面的内容。那么,并且您想在没有错误发生时(即错误无法恢复时)做一些完全不同的事情是什么意思?
最佳答案
来自MDN我知道这两种声明拒绝处理程序的方法之间没有真正的区别。
为了成功,很明显我们将获得履行处理程序:
var promise = new Promise(function(resolve, reject) {
setTimeout(function() {
resolve('success');
}, 300);
}).then(function(success) {
console.log(0, success)
}, function(failure) {
console.log(1, failure)
}).catch(function(failure) {
console.log(2, failure)
});
对于拒绝,我们将进入第一个拒绝处理程序。
拒绝 promise 时:
var promise = new Promise(function(resolve, reject) {
setTimeout(function() {
reject('failure');
}, 300);
}).then(function(success) {
console.log(0, success)
}, function(failure) {
console.log(1, failure)
}).catch(function(failure) {
console.log(2, failure)
});
抛出错误时:
var promise = new Promise(function(resolve, reject) {
throw "throw";
}).then(function(success) {
console.log(0, success)
}, function(failure) {
console.log(1, failure)
}).catch(function(failure) {
console.log(2, failure)
});
请注意 catch
block 是如何被忽略的,因为它被链接到第一个处理程序的 promise (履行或拒绝)。
如果我们将其更改为拒绝或重新抛出,我们将到达 catch
中的处理程序。
var promise = new Promise(function(resolve, reject) {
throw "re-throw";
}).then(function(success) {
console.log(0, success)
}, function(failure) {
console.log(1, failure)
throw failure;
}).catch(function(failure) {
console.log(2, failure)
});
关于javascript - catch() 和 then(successHandler, failureHandler) 的 "error handler"检测到什么错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55789430/
reqwest v0.9 将 serde v1.0 作为依赖项,因此实现 converting serde_json errors into reqwest error . 在我的代码中,我使用 se
我有这个代码: let file = FileStorage { // ... }; file.write("Test", bytes.as_ref()) .map_err(|e| Mu
我只是尝试用angular-cli创建一个新项目,然后运行服务器,但是它停止并显示一条有趣的消息:Error: No errors。 我以这种方式更新了(希望有帮助):npm uninstall -g
我从我的 javascript 发送交易 Metamask 打开传输对话框 我确定 i get an error message in metamask (inpage.js:1 MetaMask -
这个问题在这里已经有了答案: How do you define custom `Error` types in Rust? (3 个答案) How to get a reference to a
我想知道两者之间有什么大的区别 if let error = error{} vs if error != nil?或者只是人们的不同之处,比如他们如何用代码表达自己? 例如,如果我使用这段代码: u
当我尝试发送超过 50KB 的图像时,我在 Blazor 服务器应用程序上收到以下错误消息 Error: Connection disconnected with error 'Error: Serv
我有一个error-page指令,它将所有异常重定向到错误显示页面 我的web.xml: [...] java.lang.Exception /vi
我有这样的对象: address: { "phone" : 888, "value" : 12 } 在 WHERE 中我需要通过 address.value 查找对象,但是在 SQL 中有函数
每次我尝试编译我的代码时,我都会遇到大量错误。这不是我的代码的问题,因为它在另一台计算机上工作得很好。我尝试重新安装和修复,但这没有帮助。这是整个错误消息: 1>------ Build starte
在我的代码的类部分,如果我写一个错误,则在不应该的情况下,将有几行报告为错误。我将'| error'放在可以从错误中恢复的良好/安全位置,但是我认为它没有使用它。也许它试图在某个地方恢复中间表情? 有
我遇到了 csv 输入文件整体读取故障的问题,我可以通过在 read_csv 函数中添加 "error_bad_lines=False" 来删除这些问题来解决这个问题。 但是我需要报告这些造成问题的文
在 Spring 中,验证后我们在 controller 中得到一个 BindingResult 对象。 很简单,如果我收到验证错误,我想重新显示我的表单,并在每个受影响的字段上方显示错误消息。 因此
我不知道出了什么问题,因为我用 Java 编程了大约一年,从来没有遇到过这个错误。在一分钟前在 Eclipse 中编译和运行工作,现在我得到这个错误: #A fatal error has been
SELECT to_char(messages. TIME, 'YYYY/MM/DD') AS FullDate, to_char(messages. TIME, 'MM/DD
我收到这些错误: AnonymousPath\Anonymized.vb : error BC30037: Character is not valid. AnonymousPath\Anonymiz
我刚刚安装了 gridengine 并在执行 qstat 时出现错误: error: commlib error: got select error (Connection refused) erro
嗨,我正在学习 PHP,我从 CRUD 系统开始,我在 Windows 上安装了 WAMP 服务器,当我运行它时,我收到以下错误消息。 SCREAM: Error suppression ignore
我刚刚开始一个新项目,我正在学习核心数据教程,可以找到:https://www.youtube.com/watch?v=zZJpsszfTHM 我似乎无法弄清楚为什么会抛出此错误。我有一个名为“Exp
当我使用 Jenkins 运行新构建时,出现以下错误: "FilePathY\XXX.cpp : fatal error C1853: 'FilePathZ\XXX.pch' precompiled
我是一名优秀的程序员,十分优秀!