首页 > 解决方案 > 从 jQuery ajax 函数的 promise 语法到 try/catch/finally 和 async/await 的转换失败?

问题描述

下面的 jQuery 代码运行良好。

// Make request.
$.ajax(settings)
.done(function(result) {
    requestDidSucced(result);
})
.fail(function(result) {
    requestDidFail(result);
})
.always(function(result) {
    requestDidFinish(result);
});

但是,将此代码转换为使用try/catch/finallyasync/await失败,因为该finally块无权访问$.ajax().

特别是,如果我们result在块之外定义try,是否可以安全地假设使用块result获取值,就像使用finally块一样always

// Make request.
try {
    let result = await $.ajax(settings);
    requestDidSucceed(resultBox, result);
} catch (result) {
    requestDidFail(result);
} finally {
    requestDidFinish(result); // This fails because `request` is not available.
}

块是否可以finally访问 AJAX 查询的结果?

标签: javascriptjquerypromiseasync-awaites6-promise

解决方案


在块result外声明:try

// Make request.
let result;
try {
    result = await $.ajax(settings);
    requestDidSucceed(resultBox, result);
} catch (error) {
    requestDidFail(error);
} finally {
    requestDidFinish(result);
}

但是,您应该小心如何安排。例如,如果抛出错误,该catch子句也将被调用。requestDidSucceed


推荐阅读