ES6---Promise

本文深入探讨了Promise在ES6中的作用,详细解释了pending、resolved和rejected三种状态及其转换。通过张三邀请同学吃晚餐的例子,展示了Promise如何处理异步操作,并通过Promise.all分析了并发执行和结果收集。注意,Promise构造函数用于创建对象,resolve和reject分别用于推进状态,且只能调用一次。
摘要由CSDN通过智能技术生成

一、Promise简介

      ES6将事件的执行发生异步的时候,分为2个阶段:unsettled 未决阶段和settled 已决阶段,事件总是从未决阶段发展到已决阶段 。
      ES6将程序分为三种状态:pending 、resolved、 rejected这三种状态的具体含义如下:

      pending:事情处于未决阶段,还没结果
      resolved:事情处于已决阶段,已经有结果,而且可以按照正确的逻辑执行下去
      rejected事情处于已决阶段,已经有结果,但是无法按照正常逻辑执行

也就是说:
      把事情从pending状态推向resolved状态的过程中会传递一些数据,这些数据一般为真实有效数据
      把事情从pending状态推向rejected状态的过程中会传递一些数据,这些数据一般为错误信息

因此不同的已决状态也决定了不同的后续处理:
      resolved 这是一个正常的已决状态,后续处理表示为 thenable
      rejected 这是一个非正常的已决状态,后续处理表示为 catchable

为了更好的理解,以下为promise概念图:
在这里插入图片描述
下面举个例子:
故事背景是:张三想邀请同学去吃晚餐

 <script>
 	//封装询问函数  参数txname代表同学姓名
        function xunwen(txname){
            return new Promise((resolve,reject)=>{
                console.log(`张三向${txname}发出晚餐邀请`)
                //设置定时器  间隔为一秒  
                setTimeout(()=>{
                //生成一个随机数,若其小于0.2,代表同意  否则拒绝
                    if(Math.random() < 0.2){
                        console.log(`${txname}同意了`)
                        resolve(true)
                    }else{
                        console.log(`${txname}拒绝了`)
                        resolve(false)
                    }
                },1000)
            })
        }
        //存储所有同学是否同意的结果
        const proms = [];//日志数组
        //代表第一个同意的同学
        let hasAgree = false;
        for(let i = 1 ; i < 26;i++){
            const pro = xunwen(`同学${i}`).then(result => {
                if(result){
                    if(hasAgree){
                        console.log(`昨日同学${i}对我爱答不理,今日你高攀不起`)
                    }else{
                        hasAgree = true;
                        console.log(`张三很开心${i}同意了`)
                    }
                }
                return result;
            })
            //将结果添加进数组中
            proms.push(pro)
        }
        console.log(proms)
        Promise.all(proms).then(result =>{
            console.log("日志分析",result)
        })
    </script>

Promise分析及注意事项:
       Promise本质上就是一个构造函数
       1.未决阶段 同步代码
       通过调用resolve函数将promise从pending状态推向resolved状态
       通过调用reject函数将promise从pending状态推向rejected状态
       2.resolve和reject只能使用一个,如果使用多个,也只有第一个有用
       3.传递的参数只能有一个,表示推向出去的数据

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值