Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.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_Promise - Fatal编程技术网

Javascript 所有的承诺永远不会运行,然后回调

Javascript 所有的承诺永远不会运行,然后回调,javascript,jquery,promise,Javascript,Jquery,Promise,关于Q.all的工作原理,我有点不知所措。 我有以下代码段(): 第一次调用callUrl将成功,第二次调用将失败(将返回错误,因为url不存在)。 我希望Q.all执行然后回调,就像ajax一样。总是这样,但事实并非如此 我做错了什么吗?您需要链接一个catch方法并为此回调,因为Q.all在遇到拒绝的承诺时将返回拒绝的承诺 通过catch(或者您可以传递到then)的可选第二次回调),您会因拒绝的承诺而被回调。404是一个从服务器传播到JS应用程序的错误 使用.catch Q.all([ca

关于
Q.all
的工作原理,我有点不知所措。 我有以下代码段():

第一次调用
callUrl
将成功,第二次调用将失败(将返回错误,因为url不存在)。 我希望
Q.all
执行
然后
回调,就像
ajax一样。总是这样,但事实并非如此


我做错了什么吗?

您需要链接一个
catch
方法并为此回调,因为
Q.all
在遇到拒绝的承诺时将返回拒绝的承诺


通过
catch
(或者您可以传递到
then
)的可选第二次回调),您会因拒绝的承诺而被回调。

404是一个从服务器传播到JS应用程序的错误

使用
.catch

Q.all([callUrl("https://httpbin.org/get"), callUrl("https://httpbin.org/undefined")]).then(function(){
    console.log("Done");
}).catch(function(e){
    console.log("err",e);
});

谢谢你的快速回复。那么,只有当所有的承诺都成功的时候,才会接到电话?事实上,就像你说的那样。如果有任何拒绝,第一个拒绝原因将传递给
catch
处理程序。潜在的其他未决承诺不再由
Q监控。当这种情况发生时,所有的
。太棒了!谢谢你的解释(你有我的+1:),我会接受Kurt G的回答,因为他也是第一个回答的,我希望你不会介意。没问题。在我的页面上,我看到我的答案比他的答案晚了一分钟,但没问题。谢谢你的快速回复。那么只有当所有的承诺都成功时才会被召唤?@GETah,是的,所有的承诺都需要成功才能解决。这就是为什么你的回电没有被呼叫的原因。
Q.all([callUrl("https://httpbin.org/get"), callUrl("https://httpbin.org/undefined")]).then(function(){
    console.log("Done");
}).catch(function(e){
    console.log("err",e);
});