IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> Promise.then()的两个参数是什么,分别是干什么的?第二个参数和catch的区别 -> 正文阅读

[JavaScript知识库]Promise.then()的两个参数是什么,分别是干什么的?第二个参数和catch的区别

今天面试的时候被问到了Promise.then()的两个参数,以及作用是什么,我确实从来没有注意过第二个参数,平时也没有用到过,所以结束以后来补一下这个知识点。

首页我们先要区分几个概念:

  1. reject是用来抛出异常的,catch是用来处理异常的;
  2. reject是Promise的方法,而then和catch是Promise实例的方法(Promise.prototype.then
    和 Promise.prototype.catch)。

最主要区别就是then中第一个函数里抛出的异常,它的第二个函数是捕获不到异常的,后面的catch可以捕获到(或者第二个then的第二个函数也可以捕获到);
且then的第二个参数和catch捕获异常时会采取就近原则,当两者都存在时,则只有then的第二个参数能捕获到,如果then的第二个参数不存在,则catch方法会捕获到;

const p = new Promise((resolve, reject)=>{
  resolve()  //抛出成功时的结果
})

p.then((res)=>{
  throw new Error('hello');
}).then(()=>{},(err2)=>{
  console.log(err2,'err2')
}).catch((err1)=>{
  console.log(err1,'err1')
})   //图1第一行所示错误,err2会捕获到错误

p.then((res)=>{
  throw new Error('hello');
}).catch((err1)=>{
  console.log(err1,'err1')
}) //图1第二行所示错误,没有then,catch捕获异常

在这里插入图片描述

const p = new Promise((resolve, reject)=>{
  reject('你错啦~~')
})

p.then((res)=>{
  throw new Error('hello');
},(err2 => {
  console.log(err2,'err2')
})).catch((err1)=>{
  console.log(err1,'err1')
})  //图2第一行,then的第二个参数捕获异常

p.then((res)=>{
  throw new Error('hello');
}).catch((err1)=>{
  console.log(err1,'err1')
})// 图2第二行,catch捕获异常

在这里插入图片描述
建议一直用catch来捕获异常

理由是catch可以捕获前面then方法执行中的错误,也更接近同步的写法(try/catch)。因此,建议总是使用catch方法,而不使用then方法的第二个参数。

// bad
promise
  .then(function(data) {
    // success
  }, function(err) {
    // error
  });

// good
promise
  .then(function(data) { //cb
    // success
  })
  .catch(function(err) {
    // error
  });
  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-05-09 12:31:32  更:2022-05-09 12:35:03 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 0:07:31-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码