promise---几个关键问题

一、如何改变promise的状态

1、调用resolve,状态变为resolved

2、调用reject,状态变为rejected

3、throw,状态变为rejected

二、promise指定多个成功/失败的回调函数,是否都会调用

promise在实现上,会把多个回调函数都保存起来,也就是都会调用

//同一个promise p,当其状态变为resolved后,1和2都会打印
p.then(
    value=> {
        console.log(1)
    },
    reason=> {

    }
)
p.then(
    value=> {
        console.log(2)
    },
    reason=> {

    }
)

三、改变promise状态和指定回调函数,谁先谁后?

都可以,这样promise的异步处理使用起来更灵活些

//执行器函数体中的代码是同步的
//1、先改变状态,后指定回调
new Promise((resolve,reject)=>{
    resolve(1)
}).then(
    value=>{},
    reason=>{},
)

//2、先指定回调,后改变状态
new Promise((resolve,reject)=>{
    setTimeout(()=>{
        resolve(1)
    },1000)
}).then(
    value=>{},
    reason=>{},
)

四、promise.then()返回的新promise的结果状态由什么决定?

1、简单表述:由then()中被执行的回调函数,所执行的结果决定

2、详细描述:

a、抛出异常,新promise变为rejected的状态,reason为抛出的异常

b、如果返回的是非promise,新promise变为resolved状态,value为return的值

c、如果返回的是一个promise,此promise的结果就会成为新promise的结果

五、promise的异常传透

p.then(
    value=>{},
    //这里没有写失败回调,会自动补充如下代码
    //reason=>{throw reason} 或者 reason=> Promise.reject(reason)
).then(
    value=>{},
    //这里没有写失败回调,会自动补充如下代码
    //reason=>{throw reason} 或者 reason=> Promise.reject(reason)
).catch(
    reason=>{}
)

1、promise的异常传透是指,当使用promise的then链式调用时,即使没有在then中指定失败的回调函数,也可以在最后指定失败的回调,使用catch。

2、前面任何操作出了异常,中途没有被处理,都会传到最后的catch中

六、如何中断promise的链式调用

1、要知道:catch之后可以继续then

p.catch(
    reason=>{}
).then(
    value=>{},
    reason=>{},
)

2、如何操作,中断promise的链式调用

在被执行的回调函数体中返回一个pending状态的promise

return new Promise(()=>{})

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值