此问题已经在这里有了答案:
我目前在jQuery.ajax()
周围有一个包装器,该包装器处理一些常见的错误检查,并在没有其他定义的情况下提供默认的错误回调。
function ajax(name, method, data, successCallback, errorCallback) {
$.ajax({url: name, type: method, dataType: "json", data: data, success: json => {
if (json.success) {
//processing...
if (successCallback === undefined)
return;
successCallback(json);
} else {
//processing...
if (errorCallback !== undefined)
errorCallback(json.message);
else
error(json.message); //default error callback
}
}, error: (jqXHR, textStatus, errorThrown) => {
error(errorThrown);
}});
}
我当时正在考虑更改使用诺言的方法。无论如何,我是否可以为Promise提供默认的错误回调,可以使用.catch()
覆盖它,甚至可以尝试使用catch进行捕获?
使用async/await
,看起来像这样:
const request = async () => {
const response = await $.ajax({url: name, type: method, dataType: "json", data: data})
if(response.success) {
/* return response data */
}
else {
throw new Error(`Response returned a status of ${response.whateverTheStatusPropertyIsForjQueryAjax}`)
}
}
在调用请求的函数中,您可以设置错误边界:
const someFunc = async () => {
try {
const data = await request()
} catch(exception) {
throw new Error(`Request failed with\n${exception}`)
}
}
使用then
:
$.ajax({url: name, type: method, dataType: "json", data: data})
.then(response => {
if(response.success) {
/* do something */
} else {
throw new Error(`Response returned a status of ${response.whateverTheStatusPropertyIsForjQueryAjax}`)
}
})
.catch(error => throw new Error(`Request failed with\n${error}`))