1.Promise的异常穿透

1==》当你使用Promise的then,进行链式调用的时候,可以在最后指定失败的回调
2==》前面任何操作出现了异常,都会传递到最后失败的回调中进行处理; Promise的异常穿透和 p.then(resolve=>{ do someting success thing},err=>{ do someting fil thing})
是不同的哈
promise的异常穿透是进行链式调用的时候才会出现异常穿透;

2.Promise的异常穿透demo

let p = new Promise((resolve, reject) => {
setTimeout(() => {
reject('第一种err');
}, 2000)
})
p.then(res => {
console.log(111); //2s后不会输出111
}).then(res => {
console.log(222); //2s后不会输出222
}).catch(err => {
console.log(err) //最终直接走这里哈
})
之所以会走这里是因为,是setTimeout抛出了一个错误的异常;所以不会走then;而是直接走catch;
之所以是走catch;根据Promise的异常穿透
换一句话说就是:使用reject之后,将不会去执行then了,而是去执行catch

3.Promise的非异常穿透,对错误的处理

let p = new Promise((resolve, reject) => {
setTimeout(() => {
reject('第一种err');
}, 2000)
})
p.then((res) => {
console.log(res)
}, (err) => {
console.log(err);//输出错误
})
4.中断Promise链式操作
let p = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('ok');
}, 2000)
}) p.then(res => {
console.log(111)
// 有且只有一种方式去中断Promise;让Promise的状态是padding
return new Promise(() => {})
}).then(res => {
console.log(222);
}).catch(err => {
console.log(err)
}) 只常的情况下,会输出111和222.
但是你中断了Promise,让Promise的状态是padding
所以只能够输出111了。
222不能够输出。

Promise的异常穿透和中断Promise的链式请求的更多相关文章

  1. promise抛异常,执行队列

    //promise抛出异常 new Promise((resolve,reject)=>{ resolve("成功") }).then(res=>{ if(res != ...

  2. 由浅入深,从掌握Promise的基本使用到手写Promise

    由浅入深,从掌握Promise的基本使用到手写Promise 前言 在ES6之前,对于一些异步任务的处理始终没有很好的方案可以解决,处理异步的方案可谓是十分混乱,在业务需求下异步请求的套用,就形成了回 ...

  3. 比callback更简洁的链式执行promise

    promise自己理解的也不够深刻,具体知识点不在这里细说了 直接上个例子,清晰明了,自己去悟吧 <script type="text/javascript"> //模 ...

  4. Promise (1) 如何使用Promise

    Promise 也是面试高频问题, 今天我们来看看Promise是什么, 能做什么, 怎么用, 下一期我们自己来模拟一个myPromise 1  Promise 是什么 我们要学会自己给自己提问, 才 ...

  5. 在Vue单页面应用中使用Promise链式调用

    eg: this.commonLoginFun().then((res) => { if (res.errNo === 0) { const { isLogin } = res.data; if ...

  6. 从 axios 源码中了解到的 Promise 链与请求的取消

    axios 中一个请求取消的示例: axios 取消请求的示例代码 import React, { useState, useEffect } from "react"; impo ...

  7. Promise.then链式调用

    let a = new Promise((resolve,reject)=>{ resolve(1) }).then((r)=>{console.log(r)}).then(()=> ...

  8. promise不会被return触发, 一个promise对象中不会被Promise.reject触发

    1. let a = new Promise((resolve,reject)=>{ return 23 }) a; // promise <pending> 2. let a = ...

  9. 学了ES6,还不会Promise的链式调用?🧐

    前言 本文主要讲解promise的链式调用的方法及其最终方案 应用场景 假如开发有个需求是先要请求到第一个数据,然后根据第一个数据再去请求第二个数据,再根据第二个数据去请求第三个数据...一直到最后得 ...

  10. 史上最简单的手写Promise,仅17行代码即可实现Promise链式调用

    Promise的使用相比大家已经孰能生巧了,我这里就不赘述了 先说说我写的Promise的问题吧,无法实现宏任务和微任务里的正确执行(也就是在Promise里面写setTimeout,setInter ...

随机推荐

  1. Mysql--编译安装5.7版本

    1 安装环境 1)清除以往mysql残留痕迹(新机不用) yum erase mariadb mariadb-server mariadb-libs mariadb-devel -y userdel ...

  2. 地图区域大数据量 marker 坐标点高效抽稀算法

    按网上的思路一般要写双层循环,第一层循环遍历点集合,时间复杂度为O(N),第二层循环遍历结果集,逐一计算距离,距离小于阈值的不加入结果集,距离大于阈值的加入结果集,时间复杂度为O(M),双层循环总时间 ...

  3. C++17 更通用的 union:variant

    References 现代C++学习--实现多类型存储std::variant 如何优雅的使用 std::variant 与 std::optional std::variant 是 C++17 中, ...

  4. [Docker] Mac M2 – no such file or directory: /var/lib/docker/volumes ,找不到var/lib/docker/volumes (已解決)

    Mac M2 Pro Docker 24.0.6 $ docker volume inspect 14dfdb65fb7075d91b2004c979a3591df54bcc1303ff3ca96a3 ...

  5. 字符串匹配算法:Horspool算法

    Horspool 字符串匹配算法对Boyer-Moore算法的简化算法. Horspool 算法是一种基于后缀匹配的方法,是一种"跳跃式"匹配算法,具有sub-linear亚线性时 ...

  6. go语言-Go环境搭建

    go语言-Go环境搭建 下载 https://golang.org/dl/ 切换root权限 su root 进入用户列表 cd /usr/local/ 解压缩 tar -zxvf go1.13.li ...

  7. nginx安装 没有网络且缺少基础包的环境下

    一.安装 [root@oracle ~]# cd /etc/yum.repos.d/ [root@oracle yum.repos.d]# rm -rf * [root@oracle yum.repo ...

  8. <vue 路由 7、导航守卫>

    导航守卫 一.     知识点 1.什么是导航守卫? (1)vue-router提供的导航守卫主要用来监听路由的进入和离开. (2)vue-router提供了beforeEach和afterEach的 ...

  9. Spring cloud gateWay 限流器限流(一)

    转载请注明出处: spring cloud 提供了限流操作的功能,其使用步骤如下: 1.引入maven依赖: <dependency> <groupId>org.springf ...

  10. CSS 动画 : 创建 3D 立方体

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...