从 jQuery ajax 函数的承诺语法转换为 try/catch/finally 和 async/await 失败?

Failed conversion from promise syntax for jQuery ajax function to try/catch/finally and 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().[=26 的结果=]

特别是,如果我们在 try 块之外定义 result,是否可以安全地假设 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 查询的结果?

try 块之外声明 result

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

但是,您应该谨慎安排。例如。如果 requestDidSucceed 抛出错误,也会调用 catch 子句。