是否可以在JavaScript promises中定义默认错误回调? [重复]

问题描述 投票:1回答:1

我目前在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进行捕获?

javascript promise callback
1个回答
0
投票

使用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}`))
© www.soinside.com 2019 - 2024. All rights reserved.