• 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

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

  • 相关阅读:
    python性能提升之字符串拼接、字节流拼接
    长尾分布系列论文解析(二)Delving into Deep Imbalanced Regression
    NSS [UUCTF 2022 新生赛]websign
    根据服务器系统选择对应的MySQL版本
    【iMessage苹果家庭群发推】 l NotificationUID:通知ID,可以通过此ID获取详情
    JavaScript操作CSS样式
    Java游戏项目之“超级玛丽”实战教程,终于可以制作属于自己的小游戏了
    E. Non-Decreasing Dilemma
    Sqlserver修改表结构报阻止保存要求重新创建表的更改
    栈的概念|动态顺序栈的详细解析|静态顺序栈&链式栈的代码参考
  • 原文地址:https://blog.csdn.net/fangqi20170515/article/details/126594574