从 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/finally
和 async/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
子句。
下面的 jQuery 代码运行良好。
// Make request.
$.ajax(settings)
.done(function(result) {
requestDidSucced(result);
})
.fail(function(result) {
requestDidFail(result);
})
.always(function(result) {
requestDidFinish(result);
});
但是,将此代码转换为使用 try/catch/finally
和 async/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
子句。