zoukankan      html  css  js  c++  java
  • Promise原理

    基本使用

    const promise1 = new Promise((res, rej) =>{
      //状态 pending res() //or rej()
       })
    promise1.then(res => {

      // 状态 fulfilled 进入这里

    },err => {

      // 状态 rejected 进入这里

    })

    Promise

    状态:
    0 - pending
    1 - fulfilled with _value
     2 - rejected with _value
    3 - 接受另一个promise的状态, _value
     
    一旦状态不是pedding,就不能再变化
     

    构造函数Promise必须接收一个函数作为参数,此处成为handler

    handler又接收两个函数作为参数resolve,和reject

    当执行resolve【promise.state是pending】时, 改变promise.state为fulfilled,如果此promise实例通过then的第一个参数绑定的成功回调,此时会执行此成功回调

    当执行reject或执行过程遇到错误【promise.state是pending】时,改变promise.state为rejected ,如果此promise实例通过then的第二个参数或catch绑定的失败回调,此时会执行此失败回调

     

    promise的【pedding 状态】的逻辑是属于同步执行

    promise的状态变化发生在异步时,它的回调才属于异步执行

    Promise的then方法

    promise.then(onFulfilled, onRejected)

    onFulfilled,promise状态为fulfilled时执行此回调onFulfilled, 参数由resolve(参数)传递

    onRejected,promise状态为rejected时执行此回调onRejected, 参数由rejected(参数)传递

    返回一个新的promise,此promise的状态:

    • 如果onFulfilled和onRejected返回一个非promise,新promise状态是fulfilled
    • 如果onFulfilled和onRejected返回一个promise,等待promise的状态,新promise状态沿用此这个被返回的promise的状态
    • 如果onFulfilled和onRejected执行过程抛出错误,新promise状态是rejected
    • 如果onFulfilled和onRejected不是函数,沿用then对应promise的状态

    Promise的catch方法

    catch 相当于 promise.then(null, onRejected)

    promise状态为rejected时执行此回调onRejected,参数由rejected(参数)传递

     返回一个新的promise,此promise的状态:

    • 如果onRejected返回一个非promise,新promise状态是fulfilled
    • 如果onRejected返回一个promise,等待promise的状态,新promise状态沿用此这个被返回的promise的状态
    • 如果onRejected执行过程抛出错误,新promise状态是rejected
    • 如果onRejected不是函数,沿用then对应promise的状态

    Promise的finally方法

    promise.finally(cb)

    但promise状态发生变化,不管是Fulfilled和Rejected,但执行此方法传入的回调

    静态方法resolve

    返回一个promise实例,并执行resolve()使其状态变成fullfilled,如果有绑定成功回调然后执行成功回调

    静态方法reject

    返回一个promise实例,并执行reject()使其状态变成rejected,如果有绑定失败回调然后执行失败回调

    静态方法all

    接收一个数组,数组中是多个promise实例

    并行执行多个promise, 当所有的promise状态都发生变化后,执行回调,回调接收的数组,数组的每个单元是跟all传入的promise的onFulfilled和onRejected传递值一一对应

    静态方法race

    接收一个数组,数组中是多个promise实例

    并行执行多个promise,只要一个promise状态都发生变化后,此状态作为 返回的一个新的promise的状态

     

  • 相关阅读:
    vue自定义指令
    ZOJ Problem Set–2104 Let the Balloon Rise
    ZOJ Problem Set 3202 Secondprice Auction
    ZOJ Problem Set–1879 Jolly Jumpers
    ZOJ Problem Set–2405 Specialized FourDigit Numbers
    ZOJ Problem Set–1874 Primary Arithmetic
    ZOJ Problem Set–1970 All in All
    ZOJ Problem Set–1828 Fibonacci Numbers
    要怎么样调整状态呢
    ZOJ Problem Set–1951 Goldbach's Conjecture
  • 原文地址:https://www.cnblogs.com/baixinL/p/14284028.html
Copyright © 2011-2022 走看看