gpt4 book ai didi

javascript - 在另一个 promise 失败的情况下解决 promise

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:29:39 25 4
gpt4 key购买 nike

我想解决一个 promise,该 promise 又会进行 ajax 调用。无论 ajax 调用是否成功,都应解决 promise 。我尝试了以下代码段:

new Promise(function(resolve, reject) {
$.ajax({
url: "nonExistentURL",
headers: {
"Content-Language": "en"
},
async: true,
type: "DELETE",
contentType: "application/json",
crossDomain: true,
dataType: "json"
}).done(function(oSuccessData) {
debugger;
resolve(oSuccessData);
}).fail(function(oData) {
debugger;
resolve(oData);
});
}).then(function(oData) {
debugger;
}).catch(function(err) {
debugger;
});

但是,这似乎总是进入 catch 回调。为什么没有进入then回调?

最佳答案

这实际上是因为您在 fail 回调中收到的参数。它是一个 XHR then-able promise 类型的对象。由于您正在使用 rejected promise 解析函数,因此它涉及 catch block 。

您可以将 error 对象包装在另一个对象中,比如 { err: oData },然后 then 回调将得到正确解析。

new Promise(function(resolve, reject) {
$.ajax({
url: "nonExistentURL",
headers: {
"Content-Language": "en"
},
async: true,
type: "DELETE",
contentType: "application/json",
crossDomain: true,
dataType: "json"
}).done(function(oSuccessData) {
console.log("Done callback: Resolving the promise with Data");
resolve(oSuccessData);
}).fail(function(oErr) {
console.log("Fail callback: Resolving the error");
resolve({ err: oErr });
});
}
).then(function(oData) {
console.log("Then Callback");
}).catch(function(err) {
console.log("Catch the error");
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

关于javascript - 在另一个 promise 失败的情况下解决 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55136165/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com