Promise处理异常

promise.catch()可以捕获promise所有状态的异常。包括:
1、执行resolve()和reject()对应的promise.then(()=>{},()=>{}) 中的俩回调函数中的异常
2、Promise.resolve(err)触发的
3、Promise.reject(err)触发的

所以在promise后一般都要加catch

// 定义Promise
const initPromise =  (status) => {
	return new Promise((resolve, reject) => {
		// status 成功 200,失败 其它
		if (status === 200) {
			resolve(); // 由"pending"变为"fulfilled"
		} else {
			reject(); // 由"pending"变为"rejected"
		}
	});
};

// 实例化并调用promise
let testPromise = (status) => {
	const promise = initPromise(status);
	try {
		promise.then(() => {
			// resolve走这个回调
			throw new Error('error from then resolve');
		}, () => {
			// rejected走这个回调
			throw new Error('error from then reject');
		}).catch(e => {
			console.log('promise catch捕获:' + e);
		});
	} catch(e) {
		console.log('try catch捕获:' + e);
	}
}

若执行 testPromise(200) 时,输出:
在这里插入图片描述
若执行 testPromise(100) 时,输出:
在这里插入图片描述

如果new Promise中回调函数第一句错误或报错( new Error),则无论执行什么,都会输出:
在这里插入图片描述
try…catch的抛错只有在try语句里有直接错误时才会抛出。

### UniApp 中使用 Promise 处理异常的最佳实践 在 UniApp 开发环境中,数据请求通常依赖于 `axios` 或内置的 `uni.request` 函数。为了确保应用程序能够稳健运行并提供良好的用户体验,在处理网络请求时采用基于 Promise 的错误捕捉机制至关重要。 当发起 HTTP 请求时,无论是通过 `axios` 还是 `uni.request`,都应返回一个遵循 Promises/A+ 规范的对象以便后续操作[^1]。对于可能出现的各种类型的失败情况——比如超时、连接中断或是服务器端响应码不在预期范围内等——都需要有相应的措施来进行妥善管理: #### 利用 `.catch()` 方法捕获错误 每当执行异步任务时,可以在链式调用中加入 `.catch(error => {...})` 来监听任何未被捕获的拒绝事件,并在此处定义具体的恢复逻辑或向用户显示友好的提示信息[^3]。 ```javascript // 使用 uni.request 发起 GET 请求的例子 uni.request({ url: 'https://example.com/api/data', method: 'GET' }) .then(response => { // 成功后的回调函数 console.log('Data received:', response.data); }) .catch(error => { // 错误发生时触发此部分代码 console.error('Request failed with error:', error.message || JSON.stringify(error)); }); ``` #### 结合 `.finally()` 完成清理工作 无论最终结果如何(成功与否),都可以利用 `.finally(callback)` 执行一些必要的收尾动作,例如关闭加载指示器或将状态重置到初始位置[^2]。 ```javascript let loadingIndicator; function fetchData() { try { loadingIndicator = showLoading(); // 显示加载动画 return uni.request({...}).then(handleResponse).catch(handleError).finally(() => hide(loadingIndicator)); } catch (err) { handleError(err); } } fetchData(); ``` 上述方法不仅有助于提高程序健壮性和可维护性,而且也符合现代 JavaScript 编程习惯以及最佳实践经验的要求。值得注意的是,除了技术手段外,合理的文档记录和团队沟通同样重要,这能有效减少因误解而导致的人为失误风险[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值