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

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

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


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

 

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('失败')) //
.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错误处理的三种方法的更多相关文章

  1. “fatal error C1010”错误解决的三种方法

    尝试写了一个简单的类文件,但在编译的时候提示错误,具体错误信息如下: fatal error C1010: unexpected end of file while looking for preco ...

  2. vue自定义指令,比onerror更优雅的方式实现当图片加载失败时使用默认图,提供三种方法

    首先,来看下效果图(演示一下图片正常加载与加载失败时的效果) 在线体验地址:https://hxkj.vip/demo/vueImgOnerror/ 一.常规方法解决 我们都知道,img标签支持one ...

  3. 【Cocos2d-x游戏开发】解决Cocos2d-x中文乱码的三种方法

    众所周知,Cocos2d-x是一款不错的开源引擎,但是在Cocos2d-x中直接使用中文是无法正确显示的.比如下面的情况: 解决这个问题常用的有三种方法:1.通过转换为UTF-8编码来显示.2.使用i ...

  4. Linux系统下修改环境变量PATH路径的三种方法

    这里介绍Linux的知识,比如把/etc/apache/bin目录添加到PATH中有三种方法,看完之后你将学会Linux系统下如何修改环境变量PATH路径,需要的朋友可以参考下 电脑中必不可少的就是操 ...

  5. Linux启动新进程的三种方法

    程序中,我们有时需要启动一个新的进程,来完成其他的工作.下面介绍了三种实现方法,以及这三种方法之间的区别. 1.system函数-调用shell进程,开启新进程system函数,是通过启动shell进 ...

  6. 【转】asp.net导出数据到Excel的三种方法

    来源:http://www.cnblogs.com/lishengpeng1982/archive/2008/04/03/1135490.html 原文出处:http://blog.csdn.net/ ...

  7. struts2 Action 接收参数的三种方法

    刚学Struts2 时 大家可能遇到过很多问题,这里我讲一下Action 接收参数的三种方法,我曾经在这上面摔过一回.所以要警醒一下自己..... 第一种:Action里声明属性,样例:account ...

  8. MyEclipse6.5安装SVN插件的三种方法

    MyEclipse6.5安装SVN插件的三种方法 方法一.如果可以上网可在线安装 1. 打开Myeclipse,在菜单栏中选择Help→Software Updates→Find and Instal ...

  9. Java导出freemarker的三种方法

    在上一篇呢,我将导出word文档的想法与思路以及实现功能的代码分享了一下,在这里, 我想说的是我对导出freemarker模板路径的三种方法的理解和认知.  有错误的话希望大家帮忙指正 在接下来我会使 ...

随机推荐

  1. vue3 自学(一)基础知识学习和搭建一个脚手架

    两年前曾自学过几天vue,那时候版本还是vue2,但后来项目中一直没用到,当时也觉得学习成本太高,便没有继续学习下去.初学者可以看下链接文章以前的吐槽~~ 学习 Vue ,从入门到放弃 最近部门决定升 ...

  2. 关于java.lang.IllegalMonitorStateException异常说明(四)

    1.异常原因及解释 首先你要了解这个异常为什么会抛出,这个异常会在三种情况下抛出:1>当前线程不含有当前对象的锁资源的时候,调用obj.wait()方法;2>当前线程不含有当前对象的锁资源 ...

  3. 使用Pycharm创建Django项目无法创建app.

    Python3.7使用Django1.11.7创建Django项目报以下错误时: 在使用Pycharm创建Django项目报以下错误时: Traceback (most recent call las ...

  4. [考试总结]noip模拟12

    菜 今天总体来说 菜爆了,打了 \(3\) 个暴力,没有一个是正解,并且每一个分数都低得要命... 主要还是太菜了... 第一题开题发现和昨天 \(T3\) 一样,然而因为还没学可持久化数据结构就咕掉 ...

  5. 构建前端第8篇之---Webstom搭建ES6运行环境

    张艳涛 写于2021-1-22 一.在有webstorm和node.js前提下,安装全局的babel npm install babel-cli babel-eslint -g 二.在terminal ...

  6. Solidity

    起因是Xenc师傅给我截了张图,我日 居然看不懂 ,一搜才知道,之前学的版本有些老了.. 这次学下新一点的记录下 HelloWorld pragma solidity ^0.6.0; // versi ...

  7. Android源码解析——Handler、Looper与MessageQueue

    本文的目的是来分析下 Android 系统中以 Handler.Looper.MessageQueue 组成的异步消息处理机制,通过源码来了解整个消息处理流程的走向以及相关三者之间的关系 需要先了解以 ...

  8. WPF 图表控件之曲线绘制与移动

    目的:绘制简单轻量级的曲线视图 二.实现效果: 1,绘制标准基准线 2,可拖动 三.用到控件 1,Canvas 2,Ellipse XAML代码: <Canvas Background=&quo ...

  9. webpack 配置文件外置

    转自:https://www.jianshu.com/p/377bfd2d9034 1.问题初衷 解决问题的初衷,源于vue项目中公共路径在打包之后一旦遇到整体的路径更改就需要再次build一下. 如 ...

  10. Azure Bicep 开发利器

    Bicep 是一种用于声明式部署Azure资源的领域特定语言.它的目标是通过更清晰的语法.改进的类型安全性.以及对模块化和代码重用的更好支持,彻底简化编写体验. Bicep 其实是对 ARM 模板的透 ...