Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/452.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript catch()和“catch”有哪些错误;错误处理程序";然后(successHandler,failureHandler)检测?_Javascript_Promise - Fatal编程技术网

Javascript catch()和“catch”有哪些错误;错误处理程序";然后(successHandler,failureHandler)检测?

Javascript catch()和“catch”有哪些错误;错误处理程序";然后(successHandler,failureHandler)检测?,javascript,promise,Javascript,Promise,我正在学习承诺,以便在尝试使用Firebase之前能够更好地理解。我是新来的,我一直在阅读以下关于catch(): :一篇有一些练习的文章 :关于为什么承诺链之后总是需要一个catch() :关于catch()和then() 通过阅读,我得出以下结论: catch()。这些“意外异常”似乎可以被我的的故障处理程序检测到。然而,它无法区分“正常故障”和这些类型的故障。我假设其中一个“意外异常”是当您试图访问null元素的某些属性时 似乎我还可以链接then(successHandler,fa

我正在学习承诺,以便在尝试使用Firebase之前能够更好地理解。我是新来的,我一直在阅读以下关于
catch()

  • :一篇有一些练习的文章
  • :关于为什么承诺链之后总是需要一个
    catch()
  • :关于
    catch()
    then()
通过阅读,我得出以下结论:

  • catch()。这些“意外异常”似乎可以被我的
    故障处理程序
    检测到。然而,它无法区分“正常故障”和这些类型的故障。我假设其中一个“意外异常”是当您试图访问
    null
    元素的某些属性时
  • 似乎我还可以链接
    then(successHandler,failureHandler)
    ,然后继续执行
    catch()
    块以允许更精细的控制,如中所述。当我想在某件事情失败时做一些其他事情(在本例中是“正常失败”,而不是“意外异常”)并将被拒绝的承诺传递给下一个
    然后
    进行处理时,这很有用,因此可能会产生与失败部分成功时的结果截然不同的结果。如果我的
    successHandler
    failureHandler
    中出现故障,我还可以在链的末尾使用
    catch()
    捕获“意外异常”
从我的结论中可以看出,我对可能发生的错误知之甚少。我提到
null
exception是“意外异常”的一个例子(这个假设正确吗?)。但是,
failureHandler
检测到哪些其他错误,以及
catch()
检测到哪些其他“意外异常”

我在上面还提到,[
then
]无法区分正常故障和这些类型的故障。对吗?如果是,为什么重要

编辑

在阅读了更多内容之后,似乎如果在链的顶部拒绝了承诺,那么下面的
将被忽略,我立即转到
catch()
块。这意味着我上面的结论:当我想做其他事情时,如果某件事情失败,并将被拒绝的承诺传递给下一个
,那么处理
是不正确的,那么这很有用。如果是这样的话,如果我的链末端已经有了一个
catch()
,我就不再需要为我的
然后
块的每一个
故障处理程序
。但是,在第三环节中提到:

争论的焦点是,通常您希望捕获过程中每一步的错误 处理,并且你不应该在链中使用它。这个 期望的是,您只有一个最终处理程序来处理所有事务 错误-当您使用“反模式”时,某些 那么回调就不会被处理

然而,这种模式实际上非常有用:当您想要处理 这一步中发生的错误,以及您希望执行的操作 在没有发生错误的情况下完全不同的事情,即 错误是不可恢复的。请注意,这是您的控制分支 流动。当然,这有时是需要的

我的结论是,被拒绝的承诺将被传递给下一个
,然后
处理,因为我读了上面的内容。那么和您想在没有发生错误时做一些完全不同的事情是什么意思呢?即当错误不可恢复时意味着什么?

根据我的理解,声明拒绝处理程序的两种方法之间没有真正的区别

为了成功,很明显,我们将找到履行处理程序:

var promise=新承诺(函数(解析、拒绝){
setTimeout(函数(){
决心(“成功”);
}, 300);
}).然后(功能(成功){
console.log(0,成功)
},功能(故障){
console.log(1,失败)
}).catch(功能(故障){
console.log(2,失败)
});