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

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() 这样的异步方法给外部使用
如果调用了接口,还捕获了异常,就要对返回结果进行空处理

最近实践是

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

相关文章:

  • react使用拖拽,缩放组件,采用react-rnd解决
  • instanceof和typeof的区别【JavaScript常见面试题】
  • 跨境宠物摄像头是一种专为宠物主人设计的智能设备
  • OpenCV计算摄影学(1)图像修复(Inpainting)的函数inpaint()
  • 【若依框架】代码生成详细教程,15分钟搭建Springboot+Vue3前后端分离项目,基于Mysql8数据库和Redis5,管理后台前端基于Vue3和Element Plus,开发小程序数据后台
  • P5304 [GXOI/GZOI2019] 旅行者
  • 嵌入式项目:STM32刷卡指纹智能门禁系统
  • ShardingSphere--02--数据分片
  • 基于嵌入式linux的数据库:SQLite
  • 分片机制如何理解?
  • Unity Shader 学习13:屏幕后处理 - 使用高斯模糊的Bloom辉光效果
  • 统计学中的得分函数(Score Function)是什么?它和Fisher信息矩阵有什么关系?
  • Golang笔记——Interface类型
  • JavaScript获取DOM元素语法总结(getElementsByName()、querySelector()、querySelectorAll())
  • 网络安全漏洞管理要求 网络安全产品漏洞
  • OC高级编程之GCD
  • C语言数据结构—二叉树的链式结构实现
  • 【ECMAScript6】
  • 【知识】PyTorch中不同优化器的特点和使用
  • Visual Whole-Body for Loco-Manipulation论文复现
  • 住建部:目前已累计建设改造各类市政管网50万公里
  • 推动粒子治疗更加可及可享!龚正调研上海市质子重离子医院
  • 聚焦中华文明精神标识,多校专家学者跨学科对话交流
  • 墨西哥海军一载两百余人帆船撞上纽约布鲁克林大桥,多人落水
  • 中国新闻发言人论坛在京举行,郭嘉昆:让中国声音抢占第一落点
  • 铁路端午假期运输火车票今日开售,12306提升应对超大规模并发访问需求能力