当前位置: 首页 > article >正文

js中的await与async的使用

以下两个方法,区别只在有没有catch,使用的时候却要注意

// 封装请求方法,同步loading状态出去
export const fetchWithLoading = async (fn: Function, params: any, loading: Ref) => {
	loading.value = true;
	try {
		return await fn(params);
	} finally {
		loading.value = false;
	}
};

// 封装请求方法,同步loading状态出去
export const fetchWithLoading2 = async (fn: Function, params: any, loading: Ref) => {
	loading.value = true;
	try {
		return await fn(params);
	} catch (err) {
		ElMessage({
			type: 'error',
			message: 'fetchWithLoading请求失败',
		});
	} finally {
		loading.value = false;
	}
};

调用

  ctx.tableData = await fetchWithLoading(SqlQueryApi.queryData, { }, loading)
  console.log(ctx.tableData[0]); // 使用fetchWithLoading时,fetchWithLoading内报错后不会执行这里的代码,程序正常
  
  ctx.tableData = await fetchWithLoading2(SqlQueryApi.queryData, { }, loading)
  console.log(ctx.tableData[0]); // 使用fetchWithLoading2时,fetchWithLoading内报错后ctx.tableData为空,执行这段代码会导致js报错

调用await fetchWithLoading(),如果内部报错,则不会继续执行下面的代码console.log
调用await fetchWithLoading2(),如果内部报错,则会继续执行console.log,导致出现运行时错误

敲黑板

await是做异步转同步,我们默认应该认为await 内部如果报错,代码会中断,不会继续执行
所以不应该写出例子中的 fetchWithLoading2() 这样的异步方法给外部使用
如果调用了接口,还捕获了异常,就要对返回结果进行空处理

最近实践是

编写异步方法要处理数据异常,数据异常时不要返回
调用异步方法不用处理捕获异常


http://www.kler.cn/a/560839.html

相关文章:

  • 永洪科技旗下BI产品,成功入选“金融信创优秀解决方案“
  • redis添加密码
  • JavaAPI(lambda表达式、流式编程)
  • 4-知识图谱的抽取与构建-4_2实体识别与分类
  • CSS实现图片缺角效果
  • 如何查找 UBuntu的 arm版本
  • 大数据AI一体化开发再加速:DataWorks 支持GPU类型资源
  • 基于Springboot医院预约挂号小程序系统【附源码】
  • 2025:人工智能重构人类文明的新纪元
  • 插入排序:一种简单而直观的排序算法
  • 15.2 智能销售顾问系统技术架构解密:构建企业级知识驱动型对话引擎
  • 应对LLM应用中的AI幻觉,如何通过Token对数概率预测LLM的可靠性
  • 【无标题】docker-compose ps 和dokcer ps的区别
  • 23. AI-大语言模型-DeepSeek简介
  • 毕业项目推荐:基于yolov8/yolov5/yolo11的非机动车头盔佩戴检测识别系统(python+卷积神经网络)
  • 网络应用层之HTTP
  • Android Audio实战——音频相关基础概念(附)
  • CentOS的ssh复制文件
  • 强化学习笔记(一)
  • 游戏引擎学习第120天