• ES6中对Promise的理解以及它的实例方法


    1、Promise简介

    Promise是异步编程的一种解决方案,解决多个串联的异步操作形参的回调地狱;Promise本身是同步的,他的then方法、catch方法和finally方法是异步的

    Promise有3中状态:

    1. pending:进行中
    2. fulfilled:已成功
    3. rejected:已失败

    特点:

    1. 状态不受外界的影响,只有异步操作的结果,决定当前是哪一种状态;
    2. 一旦状态改变就不会再变(pending–>fulfilled;pending—>rejected)

    用法:

    Promise是一个构造函数,用来生成Promise实例;

    Promise构造函数接收一个函数作为参数,这个函数有两个参数(resolve,reject);

    resolve:将Promise对象的状态从未完成变成成功,在异步操作成功的时候调用;

    reject:将Promise对象的状态从未完成变成失败,在异步操作失败的时候调用;

    const p = new Promise((resolve, reject) => {
        //resolve函数:将Promise对象的状态从未完成变成成功,在异步操作成功的时候调用
        resolve();//返回异步操作成功的结果,将结果作为参数传递出去
        //reject函数:将Promise对象的状态从未完成变成失败,在异步操作失败的时候调用
        reject();//返回异步操作失败的结果,将结果作为参数传递出去
    })
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    2、Promise的实例方法

    const p = new Promise((resolve, reject) => {
            setTimeout(() => {
                let time = new Date().getTime();
                if (time % 2 === 0) {
                    resolve("成功的数据,time=" + time)
                } else {
                    reject("失败的数据,time=" + time)
                }
            })
        })
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    1. then( ): 当实例方法状态发生改变的时候的回调函数,返回的是一个新的Promise实例,也就是Promise可以链式书写的原因;
    p.then((value) => {
                console.log("成功的", value);
            }), (reason) => {
                console.log("失败的", reason);
            }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    1. catch( ): 用来指定发生错误的回调函数,因为Promise的使用then来返回错误,具有冒泡性质,所以在开发中一般来说通过catch来替代then中第二个参数,用于捕获错误;
    p.then((value) => {
            console.log("成功的", value);
        }).catch(value => {
                //catch( ):用来指定发生错误的回调函数
                console.log("失败的结果", value);
            })
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    1. finally( ): 不管Promise对象最后的状态如何,都会执行的操作;
    p.then((value) => {
            console.log("成功的", value);
        })/*, (reason) => {
                console.log("失败的", reason);
            }*/
            .catch(value => {
                //catch( ):用来指定发生错误的回调函数
                console.log("失败的结果", value);
            }).finally(()=>{
            console.log("不管Promise对象最后的状态如何,都会执行的操作");
        })
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    VisionPro学习笔记(3)——BeadInspectTool
    【力扣】300. 最长递增子序列 <动态规划>
    Spring事务回滚核心源码解读
    Linux 怎样通过win 远程桌面连接链接Linux后台服务器的可视化图形界面
    什么是CDN内容分发网络?如何做到加速的?
    tamarin运行
    抓包后使用postman访问出错,后端报错 MalformedJsonException: Unterminated string
    每日刷题记录 (十三)
    一期总投资5亿,出场即“巅峰”,这家EDA公司凭什么立足?
    docker 部署 若依 Ruoyi springboot+vue分离版
  • 原文地址:https://blog.csdn.net/fangqi20170515/article/details/126594574