3.ES6的Promise对象

news/2024/7/10 23:37:38 标签: es6, javascript, 开发语言

    // Promise基本用法

    let pro1 = new Promise(function (resole, reject) { })

    // Promise对象是全局对象.其中有两个参数:resolve(解决)和reject(拒绝),两个函数均为方法。resolve方法用于处理异步操作成功后业务;reject方法用于操作异步操作失败后的业务。

    // (3)、Promise的三种状态.状态只能从 初始化 -> 成功  或者  初始化 -> 失败,不能逆向转换,也不能在成功fulfilled 和失败rejected之间转换。

    // 1.pending:刚刚创建一个Promise实例的时候,表示初始状态;

    // 2.fulfilled:resolve方法调用的时候,表示操作成功;

    // 3.rejected:reject方法调用的时候,表示操作失败;

    let pro = new Promise(function (resolve, reject) {

        //实例化后状态:pending

        if ('操作成功') {

            resolve();//resolve方法调用,状态为:fulfilled          

        } else {

            reject();//reject方法调用,状态为:rejected

        }

    });

    //初始化实例后,对象的状态就变成了pending;当resolve方法被调用的时候,状态就变成了:成功fulfilled;当reject方法被调用的时候,状态就会有pending变成失败rejected。

    // then()方法:用于绑定处理操作后的处理程序。参数是两个函数,第一个用于处理操作成功后的业务,第二个用于处理操作异常后的业务。

    pro.then(function (res) {

        //chonggong后执行

    }, function (error) {

        //shibai后执行

    })

    // 对于操作异常的程序,Promise专门提供了一个实例方法来处理:catch ( )方法。

    pro.catch(function (error) {

        //shibai后执行

    })//catch只接受一个参数,用于处理操作异常后的业务。

    // 大神写法

    pro.then(function (res) {

        //chonggong后执行

    }).catch(function (error) {

        //shibai后执行

    })

    // 案例

    let pro2 = new Promise(function (resolve, reject) {

        if (true) {

            resolve('成功')

        } else {

            reject('shibai')

        }

    })

    pro2.then(requestA).then(requestB).then(requestC).catch(requestError)

    function requestA() {

        console.log('请求A成功');//请求A成功

        return '请求B,下一个就是你了';

    }

    function requestB(res) {

        console.log('上一步的结果:' + res);//上一步的结果:请求B,下一个就是你了

        console.log('请求B成功');//请求B成功

        return '请求C,下一个就是你了';

    }

    function requestC(res) {

        console.log('上一步的结果:' + res);//上一步的结果:请求C,下一个就是你了

        console.log('请求C成功');//请求C成功

    }

    function requestError() {

        console.log('请求失败');

    }

    // Promise.all()方法:接受一个数组作为参数,数组的元素是Promise实例对象,当参数中的实例对象的状态都为fulfilled时,Promise.all()才会有返回。

    let pro3 = new Promise(function (resolve) {

        setTimeout(function () {

            resolve('实例1操作成功');

        }, 5000);

    });


 

    let pro4 = new Promise(function (resolve) {

        setTimeout(function () {

            resolve('实例2操作成功');

        }, 1000);

    });


 

    Promise.all([pro3, pro4]).then(function (result) {

        console.log(result);//(2) ['实例1操作成功', '实例2操作成功']

    });

    // Promise.race()方法:它的参数要求跟Promise.all()方法一样,不同的是,它参数中的promise实例,只要有一个状态发生变化(不管是成功fulfilled还是异常rejected),它就会有返回,其他实例中再发生变化,它也不管了。

    let pro5 = new Promise(function (resolve) {

        setTimeout(function () {

            resolve('实例1操作成功');

        }, 4000);

    });

    //初始化实例pro2

    let pro6 = new Promise(function (resolve, reject) {

        setTimeout(function () {

            reject('实例2操作失败');

        }, 2000);

    });

    Promise.race([pro5, pro6]).then(function (result) {

        console.log(result);

    }).catch(function (error) {

        console.log(error);//实例2操作失败

    });


http://www.niftyadmin.cn/n/360218.html

相关文章

go embed 实现gin + vue静态资源嵌入

前言 golang1.16出来以后,早就有打算把ckman项目的前端代码打包更换成embed。在此之前,使用的是pkger进行的打包。 但是今天打包时却报了个错: 而且通过各种手段尝试均无果之后,果断把决定立即将其更换为embed进行资源嵌入管理。…

Android input device/handler的处理

handler用于处理input_event,device是发送input_event事件的设备,首先我们看一下有哪些device及handler(部分) input_register_handler 对应 input_dev_list cpu-boost cpu-boost.c sysrq sysrq.c leds input-leds.c evdev …

vue项目性能优化

一、代码层面 1.v-if和v-show使用场景区分 2.computed和watch使用场景区分 3.v-for必须加key,不可和v-if同级使用 4.纯静态数据列表展示,可通过Object.freeze冻结对象 5.组件销毁时,手动移除事件监听器,避免内存泄漏 6.图片…

【工作记录】基于docker-compose快速部署springboot应用的实践

前言 毋庸置疑,容器化部署已经是近两年的大趋势了。 本文介绍基于docker-compose快速实现springboot单体应用的容器化部署操作实践,应用使用开源的可视化爬虫spiderflow。 当然也可以通过其他方式可以完成部署,本文也只是提供一种思路。 …

深入理解Java虚拟机:JVM高级特性与最佳实践-总结-12

深入理解Java虚拟机:JVM高级特性与最佳实践-总结-12 Java内存模型与线程Java内存模型对于volatile型变量的特殊规则 Java内存模型与线程 Java内存模型 对于volatile型变量的特殊规则 关键字volatile可以说是Java虚拟机提供的最轻量级的同步机制,Java内…

Redis - Redis16个常见使用场景

1、缓存 String类型 例如:热点数据缓存(例如报表、明星出轨),对象缓存、全页缓存、可以提升热点数据的访问数据 作为Key-Value形态的内存数据库,Redis 最先会被想到的应用场景便是作为数据缓存。而使用 Redis 缓存数…

Solaris Network评述:在DeFi衍生品领域的颠覆者

去中心化金融(DeFi)已在加密领域中显现为一种变革力量,其中获得重大关注的领域之一是衍生品交易。Solaris网络是这场运动的前沿,是一个去中心化的平台,赋予用户创造和交易合成资产的能力。 合成资产模拟真实世界资产的价格变动,在…

rpc的相关知识

rpc ,http, restful的区别  网上充斥着各类类似于这样的文章:rpc 比 http 快了多少倍?既然有了 http,为什么还要用 rpc 调用等等。遇到这类文章,说明对 http 和 rpc 是由理解误区的。  实际上二者存在性以及速度是不好比的。 通…