promise错误处理的三种方法

摘要:
promise碰到then,也就是resolve或者reject的时候是异步的,所以try...catch对它是没有用的1、then(resolve,reject);then方法中第二个回调,是失败时候做的失败时候做的事functionf(val){returnnewPromise((resolve,reject)=˃{if(val){resolve({name:'小明'},100);//成功时也

promise碰到then,也就是resolve或者reject的时候是异步的,所以try...catch对它是没有用的

1、then(resolve,reject); then方法中第二个回调,是失败时候做的失败时候做的事

            functionf(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
})
            

//需要注意的是只能传递一个参数,如果传递了两个参数,第二个参数是拿不到的,data2会为undefined
f(true)
  .then( (data,data2) => {
    console.log(data2); //打印结果为undefined
  },e => {
    console.log(e);
  })

2、使用catch捕获错误

            functionf(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('失败')) //
                .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中做一些收尾的工作
            functionf(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错误处理的三种方法》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇JADX【MM系列】SAP 采购订单的批量修改下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

JS基础知识1

基础点: es5 原型链、 2. 继承、 3. this指向、 4. new操作符、 5. 隐式转换、 6. 事件循环机制macro micro、 7. 基础类型、 8. 数据去重/交集/并集、 9. 判断是否为数组、 10. 变量声明提升、 11. 函数作用域、 12. 节流/防抖、 13.  apply/call、 14.  jsonp跨域、 15....

Axios

axios 是一个基于Promise 用于浏览器和 nodejs 的 HTTP 客户端。简单的理解就是ajax的封装 它本身具有以下特征:      a.从浏览器中创建 XMLHttpRequest     b.从 node.js 发出 http 请求     c.支持 Promise API     e.拦截请求和响应     f.转换请求和响应数据 ...

Uncaught (in promise) Error: Network Error at createError(axios跨域问题)

axios请求到了数据但then返回不到数据,这是由于vue前端访问地址出现的跨域问题。 1、如果你是自己写的后端,可以添加配置类来避免跨域问题(建议使用) packagecom.ftest.springboot.config; importorg.springframework.context.annotation.Configuration; im...

Vue.js 源码分析(二十七) 高级应用 异步组件 详解

当我们的项目足够大,使用的组件就会很多,此时如果一次性加载所有的组件是比较花费时间的。一开始就把所有的组件都加载是没必要的一笔开销,此时可以用异步组件来优化一下。 异步组件简单的说就是只有等到在页面里显示该组件的时候才会从服务器加载,不显式的话就不会加载,这样即可提高客户端的访问速度也可以降低对服务器的请求次数,可谓优化的一个利器。 异步组件常用有3种异步...

【Promise】Promise实现请求超时处理(加强版)

  昨天闲来无事,于是把之前写过的promise优化了一下,代码如下: /*写文件、追加写、读文件*/ var fs = require('fs'); function wrapper(fn,context) { var args = Array.prototype.slice.call(arguments,2); return...

nodeJS从入门到进阶一(基础部分)

一、Node.js基础知识 1、概念 简单的说 Node.js 就是运行在服务端的 JavaScript。 Node.js 是JavaScript的运行环境 Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。 2、安装使用 官网下载地址:http://nodejs.cn/ nodeJS5个基本对象: 1、require 引...