Promise(四)

Promise几个关键的问题

1.如果当前的Promise状态为pending状态,抛出异常后,Promise就会变成rejected状态

        const p6 = new Promise((resolve, reject) => {
            //resolve(1) //promise变为resolved成功状态
            // reject(2) //promise变为rejected失败状态
            throw 3 //抛出异常,Promise变为rejected状态,reason 为抛出的error
        })
        p6.then(() => {
            value => {},
                reason => {
                    console.log('reason',reason)
                }
        })

2.一个Promise指定多个成功/失败的回调函数,都会调用吗?

//多个调用会全部回调

        p6.then(() => {
            value => {
                console.log('success',value)
            },
                reason => {
                    console.log('reason',reason)
                }
        })
        p6.then(() => {
            value => {
                console.log('success',value)
            },
                reason => {
                    console.log('reason',reason)
                }
        })

3.改变Promise状态和指定回调函数谁先谁后?

        //常规:先指定回调函数,后改变的状态
        new Promise((resolve, reject) => {
            setTimeout(() => { //后改变的状态(同时指定数据,异步执行回调函数)
                resolve(1)
            })
        }).then(() => { //先指定回调函数,保存当前指定的回调函数
            value => {},
                reason => {
                    console.log('reason', reason)
                }
        })

        //方法1:先改变状态,在指定回调函数
        new Promise((resolve, reject) => {
            resolve(1) //先改变的状态(同时指定数据)
        }).then(() => { //后指定回调函数,异步执行回调函数
            value => {
                    console.log('value', value)
                },
                reason => {
                    console.log('reason', reason)
                }
        })
        //方法2:先改变状态,在指定回调函数
        const ps = new Promise((resolve, reject) => {
            setTimeout(() => { //后改变的状态(同时指定数据,异步执行回调函数)
                resolve(1)
            },1000)
        })
        setTimeout(()=>{
         p.then(() => { //先指定回调函数,保存当前指定的回调函数
            value => {},
            reason => {
               console.log('reason', reason)
                }
        })
        },1000)

注意:在Promise中,成功和失败的回调函数,永远是异步执行。即使条件满足了,也不是马上执行。

4.Promise.then返回的新的Promise的结果状态由什么决定?

        //(1)简单表达:由then()返回的新的Promise的回调函数执行的结果决定
        //(2)详细表达:
                //如果抛出异常,新的Promise变为rejected,reason为抛出的异常
                //如果返回的是非Promise的任意值,新Promise变为resolved,value为返回值
                //如果返回的是另一个新Promise,此Promise的结果就会变为新Promise的结果
            
        new Promise((resolve, reject) => {
            resolve(1)
            // reject(2)
        }).then(
            value => {
                console.log('onResolved1()', value)
                //return 2
                //return Promise.resolve(3)
                //return Promise.reject(4)
            },
            reason => {
                console.log('onrejected1()', reason)
            }
        ).then(
            value => {
                console.log('onResolved2()', value)
            },
            reason => {
                console.log('onrejected2()', reason)

            }
        )
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

画不完的饼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值