Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/79.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 承诺的单一错误处理程序_Javascript_Jquery - Fatal编程技术网

Javascript 承诺的单一错误处理程序

Javascript 承诺的单一错误处理程序,javascript,jquery,Javascript,Jquery,jquery返回的承诺是否提供了在最后一个地方处理所有错误的条款。大概是这样的: 如果是这样的话,我会很感激一些代码,可能是原始的$.deferred,.done和.fail 文件: 尝试切换到无效的url以在错误回调中结束 尝试切换到无效的url以在错误回调中结束 注意:答案假设jQuery 1.8+。在jQuery1.8之前,jQuery的承诺/延迟实现不是这样工作的 .done()/.fail()和.then()函数之间有一个细微的区别——从1.8开始,.then()的主要用途是应用过

jquery返回的承诺是否提供了在最后一个地方处理所有错误的条款。大概是这样的:

如果是这样的话,我会很感激一些代码,可能是原始的
$.deferred
.done
.fail

文件:

尝试切换到无效的url以在错误回调中结束

尝试切换到无效的url以在错误回调中结束


注意:答案假设jQuery 1.8+。在jQuery1.8之前,jQuery的承诺/延迟实现不是这样工作的

.done()
/
.fail()
.then()
函数之间有一个细微的区别——从1.8开始,
.then()
的主要用途是应用过滤器,而
.done()
只是应用回调。不同之处在于
.done()
.fail()
返回相同的承诺(因此调用
.done().done().done()
只会在初始承诺中添加更多回调),而
.then()
会为过滤器返回的值返回一个新的承诺(因此
。然后(成功)
返回一个新的承诺,该承诺将使用success返回的值进行解析)

可以在以下位置找到这种差异的演示:

因此,要复制与该映像相同的功能,您需要:

Deferred.then(success_a)
        .then(success_b)
        .then(success_c, failure);
遗憾的是,jQuery文档在这个主题上有点粗略,但是您可以在


在接受的答案中使用
$。when()
也会起作用,因为它将返回一个新的承诺,当任何给定的承诺被拒绝时,该承诺将被拒绝,并使用所有承诺的组合数据成功解析。

注意:答案假设jQuery 1.8+。在jQuery1.8之前,jQuery的承诺/延迟实现不是这样工作的

.done()
/
.fail()
.then()
函数之间有一个细微的区别——从1.8开始,
.then()
的主要用途是应用过滤器,而
.done()
只是应用回调。不同之处在于
.done()
.fail()
返回相同的承诺(因此调用
.done().done().done()
只会在初始承诺中添加更多回调),而
.then()
会为过滤器返回的值返回一个新的承诺(因此
。然后(成功)
返回一个新的承诺,该承诺将使用success返回的值进行解析)

可以在以下位置找到这种差异的演示:

因此,要复制与该映像相同的功能,您需要:

Deferred.then(success_a)
        .then(success_b)
        .then(success_c, failure);
遗憾的是,jQuery文档在这个主题上有点粗略,但是您可以在


在接受的答案中使用
$。when()
也会起作用,因为它将返回一个新的承诺,当任何给定的承诺被拒绝时,该承诺将被拒绝,并使用所有承诺的组合数据成功解析。

如果您连锁调用,您可以在末尾附加一个处理程序,该处理程序可以捕获链中任何位置的拒绝。如果您随后调用了链,则可以在末尾附加一个处理程序,该处理程序可以捕获链中任何位置的拒绝。同意答案,只需注意一点-jQuery的
$。when()
when()不同
在该伪javascript中-伪javascript有一个明确的执行顺序(首先是我的承诺,然后是成功a,然后是成功b…)+1用于向我介绍何时,但它包含在内部,而我更希望有一个语法,如(或者可能是默认行为?)
xhr1.done(xhr2.fail)(/*在xhr失败时调用*/
您也可以使用它们。
.done
.fail
只是
的快捷方式。然后(成功,失败)
@Sacho谢谢这是我一直在寻找的答案。文档中提到当延迟被拒绝时,会调用失败回调。回调是按照添加的顺序执行的,但我不清楚它是否会以这种方式工作。如果你发布它,我会很高兴标记为答案。实际上,我的评论是错误的-我已经审阅过了同意这个答案,只有一个小注释——jQuery的
$。when()
与伪javascript中的
when()
不同——伪javascript有一个明确的执行顺序(首先是我的承诺,然后是成功a,然后是成功b…).1,用于向我介绍when,但它包含在内部,而我更希望有类似于(或者可能是默认行为?)的语法
xhr1.done(xhr2).fail(/*在xhr失败时调用)*/
您也可以使用它们。
.done
.fail
只是
的快捷方式。然后(成功,失败)
@Sacho谢谢这是我一直在寻找的答案。文档中提到当延迟被拒绝时,会调用失败回调。回调是按照添加的顺序执行的,但我不清楚它是否会以这种方式工作。如果你发布它,我会很高兴标记为答案。实际上,我的评论是错误的-我已经审阅过了查看文档后,我找到了一个合适的答案。谢谢sacho。为我节省了大量时间。fiddle和all的回答非常好。这可能就是你的意思(def2而不是def):谢谢sacho。为我节省了大量时间。fiddle和all的回答非常好。这可能就是你的意思(def2而不是def):