Javascript 在另一个承诺的失败中解决一个承诺

Javascript 在另一个承诺的失败中解决一个承诺,javascript,jquery,ajax,promise,Javascript,Jquery,Ajax,Promise,我想解决一个承诺,这反过来又会产生一个ajax调用。不管ajax调用是否成功,承诺都应该得到解决。我尝试了以下代码片段: 新承诺(功能(解析、拒绝){ $.ajax({ url:“不存在的url”, 标题:{ “内容语言”:“en” }, async:true, 键入:“删除”, contentType:“应用程序/json”, 跨域:是的, 数据类型:“json” }).done(功能(OSAccessData){ 调试器; 解析(OSUCessData); }).失败(功能(oData){

我想解决一个承诺,这反过来又会产生一个ajax调用。不管ajax调用是否成功,承诺都应该得到解决。我尝试了以下代码片段:

新承诺(功能(解析、拒绝){
$.ajax({
url:“不存在的url”,
标题:{
“内容语言”:“en”
},
async:true,
键入:“删除”,
contentType:“应用程序/json”,
跨域:是的,
数据类型:“json”
}).done(功能(OSAccessData){
调试器;
解析(OSUCessData);
}).失败(功能(oData){
调试器;
决心(奥达塔);
});
}).then(功能(oData){
调试器;
}).catch(函数(err){
调试器;

});这实际上是因为您在
fail
回调中收到的参数。它是一个XHR类型的对象。由于您使用
拒绝
承诺解析函数,因此会出现
捕获

您可以将
错误
对象包装到另一个对象中,比如
{err:oData}
,然后
然后
回调将得到正确解决

新承诺(功能(解析、拒绝){
$.ajax({
url:“不存在的url”,
标题:{
“内容语言”:“en”
},
async:true,
键入:“删除”,
contentType:“应用程序/json”,
跨域:是的,
数据类型:“json”
}).done(功能(OSAccessData){
log(“完成回调:用数据解析承诺”);
解析(OSUCessData);
}).失败(功能(oErr){
log(“失败回调:解决错误”);
解析({err:oErr});
});
}
).then(功能(oData){
log(“然后回调”);
}).catch(函数(err){
log(“捕捉错误”);
});

因为jquery承诺被破坏了jquery
.done
获取
数据、textStatus、jqXHR
作为参数,而
.fail
获取
jqXHR、textStatus、errorThrown
。。。这就是jQuery最擅长的地方,我宁愿只使用其他参数,而不是
jqXHR.fail(函数(jqXHR,textStatus,errorThrown){})…当然,您可以。。。我只是举个例子。您可以使用任何对象进行解析,但被拒绝的
承诺除外。
解析错误
-不是这样,是不是,它解析的是jQuery Bastarized XHR对象;它作为第一个参数传递给
fail
,但作为
done
的最后一个参数,所以有点像你在做
解析(Promise.reject())
,很有趣!第一个承诺确实得到了解决,但内部被拒绝的一个在转到较低的
之前被打开。然后
/
.catch
@JaromandaX是的,我们并没有完全解决错误。看起来yash bagadia想要访问错误对象。然而,我们在那里几乎可以做任何事情。比如,解决一些其他数据,如“失败”,或任何不是拒绝的承诺。