重读es6, 正确了解promise中catch的用法

前言

在最近的项目中,用到了es6的promise语法,发现promise.prototype.catch 并不只是单单reject抛出的回调函数,所以今天做一些笔录,防止以后在项目中又碰到这样的问题。

先介绍一下promise.prototype.catch

Promise.prototype.catch 方法是 .then(null, rejection) 或是 .then(undefined, rejection)的别名,用于指定发生错误时的回调函数。

如果Promise 对象状态变为resolved,则会调用then方法指定的回调函数;如果异步操作抛出错误,状态就会变为rejected,就会调用catch方法指定的回调函数,处理这个错误。另外,then方法指定的回调函数,如果运行中抛出错误,也会被catch方法捕获。

下面是摘抄阮一峰的es6入门的

p.then((val) => console.log(‘fulfilled:‘, val))
  .catch((err) => console.log(‘rejected‘, err));

// 等同于
p.then((val) => console.log(‘fulfilled:‘, val))
  .then(null, (err) => console.log("rejected:", err));

下面是我自己写的例子

const testPromise = new Promise(function (resolve, reject) {
    let a = 5
    if (a === 5) {
      resolve(‘success‘)
    } else {
      reject(‘catch error‘)
    }
  })
  testPromise.then(res => {
    throw new Error(‘then error‘)
  }).catch(err => {
    console.log(‘catch error‘)
    console.log(err)
  })

这个例子最终会先输出catch error,然后再抛出错误信息。

总结

then中抛出错误,就会调用promise.prototype.catch的回调函数。

原文地址:https://www.cnblogs.com/andrewkz/p/11254555.html

时间: 2024-11-09 08:02:57

重读es6, 正确了解promise中catch的用法的相关文章

对Promise中的resolve,reject,catch的理解

想必接触过Node的人都知道,Node是以异步(Async)回调著称的,其异步性提高了程序的执行效率,但同时也减少了程序的可读性.如果我们有几个异步操作,并且后一个操作需要前一个操作返回的数据才能执行,这样按照Node的一般执行规律,要实现有序的异步操作,通常是一层加一层嵌套下去. 为了解决这个问题,ES6提出了Promise的实现... 一   Promise 对象的含义? Promise 对象用于一个异步操作的最终完成(或失败)及其结果值的表示.简单点说,它就是用于处理异步操作的,异步处理成

[js高手之路] es6系列教程 - promise常见用法详解(resolve,reject,catch,then,all,race)

关于promise我在之前的文章已经应用过好几次,如[js高手之路]Node.js+jade+express+mongodb+mongoose+promise实现todolist,本文就来讲解下promise的常见用法. 为什么会有promise,他的作用是什么? promise主要是为了解决js中多个异步回调难以维护和控制的问题. 什么是promise? 从图中,我们可以看出,Promise是一个函数,这个函数上有在项目中常用的静态方法:all, race, reject,resolve等,原

Promise中的then第二个参数和catch有什么区别?

Promise中的then第二个参数和catch有什么区别? 首页我们先要区分几个概念,第一,reject是用来抛出异常的,catch是用来处理异常的: 第二:reject是Promise的方法,而then和catch是Promise实例的方法(Promise.prototype.then 和 Promise.prototype.catch). 1. 区别 主要区别就是,如果在then的第一个函数里抛出了异常,后面的catch能捕获到,而then的第二个函数捕获不到. catch只是一个语法糖而

深入理解ES6里的promise

一.ES6 Promise是什么? 复杂的概念先不讲,我们先简单粗暴地把Promise用一下,有个直观感受.那么第一个问题来了,Promise是什么呢?是一个类?对象?数组?函数? 别猜了,直接打印出来看看吧,console.dir(Promise),就这么简单粗暴. 这么一看就明白了,Promise是一个构造函数,自己身上有all.reject.resolve这几个眼熟的方法,原型上有then.catch等同样很眼熟的方法. 这么说用Promise new出来的对象肯定就有then.catch

ES6 - Note5:Promise

1.Promise介绍 Promise最早是社区提出和实现,后面ES6将其写入标准,并原生提供Promise对象,是一种异步编程的解决方案,具体的概念大家可以去查看相关的资料.传统上处理异步都是以callback回调函数的方式完成,但是当回调嵌套的太多,便会使程序很难理解,如下所示 function a(cb){ console.log('a...'); cb('a'); } function b(cb){ console.log('b...'); cb('b'); } function c(c

ES6——异步操作之Promise

基本概念: Promise : 是 ES6 中新增的异步编程解决方案,提现在代码中他是一个对象 可以通过Promise构造函数来实例化. -new Promise(cb) ===> 实例的基本使用,Pending Resolved Rejected > 两个原型方法: -Promise.prototype.then() -Promise.prototype.catch() > 两个常用的 静态方法. -Promise.all(); -Promise.resolve(); conse im

编写高质量代码改善C#程序的157个建议——建议66:正确捕获多线程中的异常

建议66:正确捕获多线程中的异常 多线程的异常处理需要采用特殊的方式.一下这种方式会存在问题: try { Thread t = new Thread((ThreadStart)delegate { throw new Exception("多线程异常"); }); t.Start(); } catch (Exception error) { MessageBox.Show(error.Message + Environment.NewLine + error.StackTrace);

如何实现自己特定的内存管理,如何正确替换C++中的全局运算符new和delete

在谈下面的问题之前,请先看看写的这篇博客:new operator和operator new之间的区别 考虑下面的代码块,能运行,但是存在一些问题,我们将一一解答: #include <stdio.h> #include <iostream> using namespace std; class A { public: A() { throw exception(""); } void operator delete(void *p, size_t s) { c

ES6学习之Promise对象

1.什么是Promise对象? Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大.原生提供了Promise 对象.Promise 简单说就是一个容器,里面保存着之后才执行的事件.从语法层面来说,Promise 是一个对象,从它可以获取异步操作的消息.Promise 提供统一的 API,各种异步操作都可以用同样的方法进行处理. 2.Promise对象的特点 (1)首先Promise对象的状态不受外界影响.其次promise对象代表一个异步操作,有三种状