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的状态

     

  • 相关阅读:
    20191024-6 Alpha发布用户使用报告
    【第三章】MySQL数据库的字段约束:数据完整性、主键、外键、非空、默认值、自增、唯一性
    【第六章】MySQL日志文件管理
    【第四章】MySQL数据库的基本操作:数据库、表的创建插入查看
    【第一章】MySQL数据概述
    【Linux运维】LNMP环境配置
    【Linux 运维】linux系统修改主机名
    【Linux 运维】linux系统查看版本信息
    【Linux 运维】Centos7初始化网络配置
    50、树中两个节点的公共祖先
  • 原文地址:https://www.cnblogs.com/baixinL/p/14284028.html
Copyright © 2011-2022 走看看