一、finally配合try / catch一起使用;

1、try: 语句测试代码块的错误,一般把可能会出错的代码放到这里;

2、catch: 只有try里面的代码块发生错误时,才会执行这里的代码,参数err记录着try里面代码的错误信息

3、finally: 无论有无异常里面代码都会执行

4、try catch缺点:

        1)try catch耗性能
   2)try catch捕获不到异步错误
   3)try catch可能会导致报错点更模糊

5、执行顺序

        try里面的代码报错的时候,catch里面的代码才会执行,finally里面的代码永远会执行

        catch和finally里面,正常的代码会从上到下顺序执行

        如果只是catch里面代码出错,则报catch里面的错误

        如果catch和finally都出错则会报finally里面的错误

async fn () {
	   try{ //只要上面的语句出现错误或者throw语句这句将不会被执行
	   		const res = await userinfo() // 捕获
	   		this.list = res.data.list
	   		console.log('正确')
	   }catch(err){ //如果try中发现错误,则执行catch中的语句,如果没有错误,则跳过catch
	   		console.log('err')
	   }finally{
	      	console.log("无论如何都会执行");
	   }
 }

 二、finally配合.then和.catch使用

 不管一个Promise的状态是fulfilled还是rejected,传递到finally方法的回调函数onFinally都会被执行。我们可以把一些公共行为放在onFinally执行,比如把loading状态置为false。或者理解为 不管promise最后的状态,在执行完.then或.catch指定的回调函数以后,都会执行finally方法指定的回调函数。

p.then((res)=>{
    console.log('成功=>', res)
}).catch(()=>{
    console.log('失败')
}).finally(()=>{
    this.loading = false
})

比如在开发我我用到的:用于关闭loading弹框;

uni.showLoading({
	title: '加载中...',
	mask: true,
})
const data = {
	aaa: this.aaa,
	bbb: this.bbb
}
promise(data).then(res => {
	if(res.success){
		this.fff = res.datas.obj;
	}else{
		this.xxx = {};
		this.yyy = true;
		this.zzz = res.message;
	}
	}).catch((err)=>{
	    console.log("err=>", err);
	}).finally(() => {
		uni.hideLoading();
})

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐