Promise

Promise

什么是pomise

 let pro1 = new Promise((resolve, reject) => {
            // 默认情况下pro1为padding状态
            // 在函数中调用不同的方法,转换成不同的状态
            // 1,调用resolve函数转换为成功状态
            // resolve(123)
            // 2,调用reject()函数转换为失败状态

        })
        console.log(pro1);

promise作用

解决回调地狱(嵌套了很多层的回调函数):一个异步操作需要等待之前的异步操作完成,无论是事件还是函数,都会陷入不断地嵌套

并没有完全的解决回调,只是把过程写的更加简单可控

 //异步场景:做作业,当一门作业做完后才会做下一门作业
        function doHomework(homework, callback) {
            setTimeout(() => {
                console.log(`开始做${homework}作业`);
                if (Math.random() > 0.5) {
                    callback(true)
                } else {
                    callback(false)
                }
            }, 2000)
        }
        doHomework('数学', (result) => {
            if (result) {
                console.log('作业做完了');
                doHomework('语文', (result) => {
                    if (result) {
                        console.log('作业做完了');
                        doHomework('英语', (result) => {
                            if (result) {
                                console.log('作业做完了');

                            } else {
                                console.log('作业没做完');
                            }
                        })

                    } else {
                        console.log('作业没做完');
                    }
                })
            } else {
                console.log('作业没做完');
            }
        })

promise封装ajax

  // 封装ajax
        let proAjax = new Promise((resolve, reject) => {
            $.ajax({
                url: '/api/poisearch.json',
                method: 'get',
                datatype: 'json',
                success(data) {
                    resolve(data)
                },
                error(err) {
                    reject(err)
                }
            })
        })
        proAjax.then(data => {
            console.log(data);
        }, err => {
            console.log(err);
        })

promise特点

promise的状态不受外界影响
共有三种状态
1,padding,初始状态
2,resolvede(fulfilled),成功状态
3,rejected,失败状态
只有一部操作的结果可以决定当前状态,其他操作无法改变当前状态

promise状态一旦改变,就不会在变(状态改变不可逆),而且只能有两种变化,从padding状态到fulfilled 或者padding到rejected

 // 打印顺序,a,c,d,b
        // 原因:promise在padding状态下的代码执行是同步的,会优先执行,所以先打印 a ,然后c打印也是同步的,其中定时器和then方法中的代码时异步的
        // 都会放在任务队列中,不过then方法中的代码是在微队列中,定时器代码在宏队列中所以先打印 d 在打印 b
        let pro3 = new Promise((resolve, reject) => {
                console.log('a');
                setTimeout(() => {
                    console.log('b');
                }, 0)
                resolve('d')
            })
            // then方法:可以传递两个参数,一个是resolve状态执行,一个是rejected状态执行
        pro3.then(data => {
            console.log(data);
        }, (err) => {
            console.log(err);
        })
        console.log('c');

promise中的方法

原型方法(实例方法)
  • then()
    chach()
    finally():当promise为已决阶段是运行,没有参数,用来测试promise
构造函数方法(静态方法)
  • resolve方法
    reject方法

    • 如果方法中传递的是一个promise对象,则直接返回这个promise对象
  • all():参数为一个数组,数组中全部都是promise对象,如果所有对象的状态都为resolve,则会返回一个新的promise对象状态为resolve,如果有一个为rejected则返回一个新的promise对象状态为rejected

  • race(arr):比的是速度,当参数中第一个promise对象完成时,则返回的新对象的状态与第一个完成的对象的状态相同

async,await关键字:简化promise写法

 // async:函数修饰符,被修饰的函数一定返回一个promise对象 
        // awiat:相当于then方法,但是必须写在anync关键字的函数中,如果await后边不是promise对象则直接返回后边的语句
        async function text() {
            return 1 //使用return,推出去的状态为resolved
                // throw 2 //使用throw,推出去的状态为rejected
        }
        async function text2() {
            let data = await text() //await:可以拿到text中返回的值 为1
            console.log(data);
        }
        let p1 = text()
        console.log(p1); //默认为resolved状态,值为undefined
        let p2 = text2()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值