• promise用法


    Promise对象接受一个函数作为参数,该函数的两个参数分别是resolve和reject,这两个参数都是回调函数

    reslove包裹的数据为then的参数(回调函数)的参数data

    reject包裹的数据为catch的参数(回调函数)的参数d

    Promise有三种状态:pending(进行中)、fulfilled(已成功)和rejected(已失败)

    一旦状态改变,就不会再变,任何时候都可以得到这个结果。Promise对象的状态改变,只有两种可能:从pending变为fulfilled和从pending变为rejected只要这两种情况发生,状态就凝固了,不会再变了

    所以上面代码如果reslove在reject前面 状态从pending变为fulfilled将调用then打印111  

    如果reject在reslove前面 状态从pending变为rejected将调用catch打印555

    链式调用

    在then中如果返回一个promise对象 可以在下一个then方法中拿到其传给resolve的值

    上面代码将最后打印666

    promise.all()该方法用于将多个Promise实例,包装成一个新的Promise实例。

    var p = Promise.all([p1,p2,p3]);

    (1)只有p1、p2、p3的状态都变成fulfilled,p的状态才会变成fulfilled,此时p1、p2、p3的返回值组成一个数组,传递给p的回调函数。
    (2)只要p1、p2、p3之中有一个被rejected,p的状态就变成rejected,此时第一个被reject的实例的返回值,会传递给p的回调函数。

    请看下面示例:需要注意的是,promise.all()成功时,在then(result)中result是个数组

    1. let p1 = new Promise((resolve, reject) => {
    2.   resolve('成功了')
    3. })
    4. let p2 = new Promise((resolve, reject) => {
    5.   resolve('success')
    6. })
    7. let p3 = Promise.reject('失败')
    8. Promise.all([p1, p2]).then((result) => {
    9.   console.log(result)               //['成功了', 'success']
    10. }).catch((error) => {
    11.   console.log(error)
    12. })
    13. Promise.all([p1,p3,p2]).then((result) => {
    14.   console.log(result)
    15. }).catch((error) => {
    16.   console.log(error)      // 失败了,打出 '失败'
    17. })

    Promise.race() 函数返回一个 Promise,写法和all一样  它可以是完成( resolves),也可以是失败(rejects),这要取决于第一个完成的方式是两个中的哪个。

    Promise.race([p3,p1, p2]).then((result) => {
      console.log(result)            
    }).catch((error) => {
      console.log(error)
    })
     

    简单解析: race含有竞速的意思,将多个Promise放在一个数组中,数组中有一个promise最先得到结果,不管是" 完成(resolved)"还是" 失败(resolved)" , 那么这个 .race 方法就会只返回这个结果,其他结果就不用管了。

  • 相关阅读:
    OSM+three.js打造3D城市
    一文说透kafka底层架构
    【后端版】分布式医疗云平台【【统计模块】his-statistics 模块、【子父项目】statistics-api 、statistics-domain、statistics-mapper】(十五)
    基于Java+SpringBoot+Vue火车订票管理系统的设计与实现 前后端分离【Java毕业设计·文档报告·代码讲解·安装调试】
    mybatis 动态sql和分页
    开juǎn有益系列(一)——Binary search(二分查找/折半查找算法)
    CLK_CFG_AD9516时钟芯片(配置代码使用说明)
    斐波那契数列 IV
    Java基础知识(知识点)
    年薪30W,BAT抢着要,懂面试技巧的测试人究竟多吃香?
  • 原文地址:https://blog.csdn.net/Noctis99/article/details/127069535