javascript - 从 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/finally
并async/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 查询的结果?
解决方案
在块result
外声明:try
// Make request.
let result;
try {
result = await $.ajax(settings);
requestDidSucceed(resultBox, result);
} catch (error) {
requestDidFail(error);
} finally {
requestDidFinish(result);
}
但是,您应该小心如何安排。例如,如果抛出错误,该catch
子句也将被调用。requestDidSucceed
推荐阅读
- swift - 有什么方法可以强制在 iOS13 的入职过程中出现“始终允许”提示?
- swift - MDCChip 选择的图像正在取代我的标题标签
- xaml - XAML:嵌套样式中的绑定
- java - 我如何为android片段类编写单元测试?
- r - 重新缩放热图
- spring - Spring boot显示Whitelabel错误页面,否则bock在映射中不执行
- python - Django:获取某个用户所在的会议列表
- c# - 一旦 If 语句为真,循环就会停止,我不知道如何继续循环
- sql - SQL查询以空值显示员工出勤和缺勤
- ios - 视频预览的自定义形状:AVCaptureVideoPreviewLayer?