假设我有一个返回promise
的函数。外部函数检查返回的诺言,以决定如何处理.fail()
条件。
function refreshTimeline() {
var promise = ajaxMethod1()
.then (function (data) {
return ajaxMethod2()
})
.then(function(json) {
//...
});
return promise;
}
function outerFunction() {
refreshTimeline
.then(function() {
//...
})
.fail(function(jqXHR, textStatus, errorThrown) {
// This will handle any errors in the chain *including* the refreshTimeline
});
}
我的问题是我需要在refreshTimeline()中引发一个自定义业务异常,该异常应由外部函数捕获,就像处理任何常规Ajax错误一样。目标是让externalFunction的
fail()
获取此异常,并可能以特殊方式处理它(也许它需要识别它)。但是以下操作无效:
function refreshTimeline() {
var promise = ajaxMethod1()
.then (function (data) {
return ajaxMethod2()
})
.then(function(json) {
if (someBusinessCondition(json) {
// throw custom exception
throw "MyException"; //JS gives "Uncaught" msg
}
});
return promise;
}
因此,我不想自己在
refreshTimeline()
中处理此业务错误(因为这不是此实用程序功能的工作-它只是将错误转发到下游),而我想将其传播到外部错误处理程序,该错误处理程序将是常规.fail()
。这可能吗? 最佳答案
而不是抛出异常,而是以您的字符串/ Exception /任何对象作为参数,返回一个被拒绝的延迟/承诺实例。
function refreshTimeline() {
var promise = ajaxMethod1()
.then (function (data) {
return ajaxMethod2();
})
.then(function(json) {
if (someBusinessCondition(json) {
// return your error as a rejected (failed) promise
return $.Deferred().reject("MyException");
}
});
return promise;
}
这将使用
.fail()
作为第一个参数(您将其命名为"MyException"
)的值调用外部jqXHR
。关于javascript - jQuery Ajax Promise:抛出自定义异常,并使其陷入外部fail(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48833723/