码迷,mamicode.com
首页 > 其他好文 > 详细

promise错误处理的三种方法

时间:2020-07-14 00:41:12      阅读:131      评论:0      收藏:0      [点我收藏+]

标签:span   func   final   就会   错误处理   解决方法   finally   The   而不是   

 

1、传递参数,错误的原因

            function f(val){
                return new Promise((resolve,reject) => {
                    if(val){
                        resolve({ name:‘小明‘ },100);  //成功时也可以传递一个值,但需要注意的是只能传递一个参数,传两个的话第二个参数是拿不到的
                    }else{
                        reject(‘404‘);  //错误处理的第一种方式:传递参数,错误的原因
                    }
                });
            }
            
            
            //then(resolve,reject),碰到resolve或是reject都是异步的,所以tr catch对它是没有用的
            //then方法中的第二个回调reject,是失败时候做的事
            f(false)
                .then( (data, data2) => {
                    console.log(data2);  //undefined
                }, e => {  
                    console.log(e);  //404
                })
            

 

 

2、使用catch捕获错误

            function f(val){
                return new Promise((resolve,reject) => {
                    if(val){
                        resolve({ name:‘小明‘ });  
                    }else{
                        reject(‘404‘);  
                    }
                });
            }
            
            f(true)
                .then(data => {  //?参数的格式到底要不要打括号
                    console.log(data); //{name:‘小明‘}
                    return f(false);  //返回的promise是失败的话,后面的then对这个失败没有处理的话,就会继续往下走
                })
                .then(() => {
                    console.log(‘我永远不会被输出‘)
                })
                .then(() => {
                    
                }, e => console.log(‘失败‘)) //?这里的e是形参而不是事件对象对吗
                .catch(e => {  //上面处理了错误的话,这个catch就不会运行了
                    console.log(e);  //404
                })
                .then( () => {  //catch后面可以继续then,但是如果后面的then出错了,跟上一个catch就没有关系了
                    console.log(e)
                    return f(false)
                })
                .catch()  //如果最后一个catch有错误,会无限catch
                //标准es中,这个问题没有很好地解决方法,但是第三方的库有对全局的捕获
            

 

 

3、finally捕获

            
            //finally
            //不论成功还是失败,finally中的内容一定会执行
            //可以在finally中做一些收尾的工作
            function f(val){
                return new Promise((resolve,reject) => {
                    if(val){
                        resolve({ name:‘小明‘ });  
                    }else{
                        reject(‘404‘);  
                    }
                });
            }
            
            f(true)
                .then(data => {
                    console.log(data);  //{name:‘小明‘}
                    return f(false);
                })
                .catch(e => {
                    console.log(e)   //404
                    return f(false);  //即便返回了一个成功的promise,下面的finally也会执行,如果返回的是失败的promise,控制台最后一行会报错uncaught (in promise) 404
                })
                .finally( () => {
                    console.log(100)  //100
                })
            
            
            

 

promise错误处理的三种方法

标签:span   func   final   就会   错误处理   解决方法   finally   The   而不是   

原文地址:https://www.cnblogs.com/rickdiculous/p/13296753.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!