promise(1)promise的理解和使用

理解

抽象表达

Promise是JS中进行异步编程的新的解决方案。
注:旧的解决方案:纯回调的形式

具体表达

  1. 从语法上来讲:Promise是一个构造函数
  2. 从功能上来讲:Promise对象用来封装一个异步操作并可以获取其结果

Promise的状态改变

  1. pending变为resolved
  2. pending变为rejected
    注意:

只有这两种状况,且一个Promise对象只能改变一次
无论变为成功还是失败,都只有一个数据
成功的结果数据一般为value,失败的结果数据一般为reason

Promise的基本流程

在这里插入图片描述

 <script>
        //1.创建新的promise对象
        const p = new Promise((resolve,reject) => {
            //执行器函数(执行异步操作)------>同步回调
            //2.执行异步任务
            setTimeout(() => {//------>异步回调
                const curTime = Date.now();
                if(curTime % 2 == 0){
                    //3.1 如果成功,执行resolve(value)
                    resolve('异步操作成功:当前时间为偶数:' + curTime);
                }else{
                    //3.2如果失败,执行reject(reason)
                    reject('异步操作失败:当前时间为奇数:' + curTime);
                }
            },1000)

        });
        //4.接收数据
        p.then(
            //4.1 得到成功的数据 onResolved()
            value => {
                console.log('成功:' + value);
            },
            //4.2 得到失败的数据 onRejected()
            reason => {
                console.log('失败:' + reason);
            }
        )
    </script>

为什么要用promise

  1. 在纯回调的形式中必须是:先指定好处理成功的回调失败的回调函数,接着才可以 启动异步任务

如果是先启动异步任务,接着在指定回调,此时的回调已经得不到数据,因为异步任务已经完成了

  1. promise指定回调函数的方式更加灵活:主要灵活体现在时间的问题上,纯回调的形式回调函数的指定必须是在 启动异步任务之前指定 而promise可以是启动异步任务之后,甚至是启动的异步任务完成之后进行回调的指定

注:一旦创建好promise对象 const p = new Promise((resolve,reject) => {...});此时异步任务已经启动,可能正在执行异步任务的过程中,还没有完成操作。(异步任务的启动完成是需要花费一定的时间的)—》一个promise对象对应一个异步任务

  1. promise支持 链式调用 ,可以解决回调地狱问题

什么是回调地狱???
答案:首先回调地狱涉及到多个异步操作,而且它们是连续串联执行的(也就是第二个异步任务是以第一个异步任务的结果为条件的,第三个异步任务是以第二个异步任务的结果为条件)
回调地狱的缺点???
答案:不便于阅读,不便于异常处理
解决方案???
答案:promise链式调用()
终极解决方案???
答案:async/await
回调地狱:
在这里插入图片描述
promise解决回调地狱:
在这里插入图片描述
注: 由于promise中仍然存在回调函数,因此并不是解决回调地狱的终极解决方案
async/await解决回调地狱终极解决方案:
在这里插入图片描述

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值