Promise相关知识点

Promise的状态总共有三种

1、pending==>resolve/fulfilled
2、Pending==>reject
如果promise里面没有resolve 那么它的状态会一直是pengding 将不会执行后面的语句

Promise 对象的值(PromiseResult)

只有resolve/reject可以修改PromiseResult的值 一旦修改 无法再次改变

Promise构造函数 :Promise(excutor){}

1、excutor函数 :执行器(resolve,reject)=》{}
2、resolve:异步函数成功时调用 value=>{}
3、reject:异步函数失败时调用 reason=>{}
注意 excutor会在Promise内部立即同步调用,异步操作在执行器中执行

const p = new Promise((resolve, reject) => {
    console.log('此处是同步调用 被称为执行器函数')
    setTimeout(() => {
        // Math.ceil向上取整
        console.log('异步')
        // Math.random() * 100取1-100的随机数
        let n = Math.ceil(Math.random() * 100)
        if (n < 30) {
        resolve(n)
        } else {
        reject(n)
        }
    }, 1000)
})

Promise.prototype.then方法 (onResolved,onReject)=>{}

1、onResolve函数:成功的回调函数()=>{}
1、onReject函数:失败的回调函数()=>{}

Promise.prototype.catch (onRejected)=>{}

1、onRejected函数:用于执行失败的回调(reason)=>{}

Promise.prototype.finally (onRejected)=>{}

1、不管promise最后的状态,在执行完then或catch指定的回调函数以后,都会执行finally方法指定的回调函数。
应用场景 关闭loading可以写在此处

Promise.all (promises)=>{}

1、promises:包含n个promise数组
注意:返回一个新的promise,只有所有的promise都成功了才会成功,如果有一个promise失败就直接失败

Promise.race方法:(promises)=>{}

1、promises包含n个promise数组
注意:返回一个新的promise,第一个完成的promise的结果状态就是最终的结果状态

如何改变promise的状态

1、resolve(value):如果当前是pending就会变resolved
2、reject(reson):如果当前是pengding就会变rejected
3、throw 抛出异常:同2

当一个promise指定多个成功或者失败的回调函数,都会调用吗

解答 只要prmise的状态发生改就会全部调用

改变promise状态和指定函数(then)执行谁先谁后的问题(意思就是resolve先执行还是then先执行)

1、都有可能 正常情况下是先指定回调 再改变状态 但也可以先改变状态 再指定回调
2、如何先改变状态再指定回调呢?

    a、在执行器中直接调用resolve/reject
    b、延迟更长的时间再调用then

3、什么时候才能得到数据?

   a、如果先指定回调、那当状态发生改变时 回调函数就会调用 得到数据
   b、如果先改变状态,那当指定回调时,回调函数就会调用 得到数据

同步任务就是先改变状态后指定回调 异步任务就是先指定回调后改变状态
不管是同步任务还是异步任务,then方法的数据都会在状态改变之后再去获取

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

1、简单表达:由then()指定的回调函数执行的结果决定
2、详细表达:

 a、如果抛出异常,新Promise变为rejected reson为抛出的异常
 b、如果返回的是非promise的任意值,新promise变为resolved,value为返回值
 c、如果返回的是一个新的promise 此promise的结果就会成为新的promise的结果

promise 如何串联多个操作任务

1、promise的then()返回一个新的promise,可以开成then()的链式调用
2、通过then的链式调用串联多个同步/异步任务

promise异常传透

1、当使用promise的then链式调用时,可以在最后指定失败的回调
2、前面的任何操作出现了异常 都会传到最后失败的回调中处理

中断promise链

1、当使用promise的then链式调用时,在中间中断,不再调用后面的回调函数
2、办法 在回调函数中返回一个pendding状态的promise对象 return new Promise(()=>{})
状态不改变不会继续往下走

async函数

1、async函数的返回值是一个promise对象
2、promise对象的结果由async函数执行的返回值决定

await表达式

1、await右侧的表达式一般为promise对象 但也可以是其他的值
2、如果表达式是promise对象,await返回的是promise 成功的值
3、如果表达式是其他值 直接将此值作为await的返回值
await必须卸载async函数中,但async函数中可以没有await
如果await的promise失败了,就会抛出异常,需要通过try…catch捕获处理

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值