• Promise


    一、概述

      1、Promise是异步编程的一种解决方案

      2、Promise对象代表一个异步操作,有三种状态:

    • Pending(进行中)
    • Resolved(已完成,又称Fulfilled)
    • Rejected(已失败)。

      3、一旦状态改变,就不会再变,任何时候都可以得到这个结果

      4、可以将异步操作以同步操作的流程表达出来

      5、无法取消Promise,一旦新建它就会立即执行,无法中途取消

      6、如果不设置回调函数,Promise内部抛出的错误,不会反应到外部

      7、当处于Pending状态时,无法得知目前进展到哪一个阶段

      

    二、基本用法

      1、构造函数接受一个函数function()为参数,function函数的参数resolve和reject均为方法名,用来决定promise对象的执行结果

    var promise=new Promise(function(resolve,reject){});

      2、Promise实例生成以后,可以用then方法分别指定Resolved状态和Reject状态的回调函数。then方法可以接受两个回调函数作为参数。第一个回调函数是Promise对象的状态变为Resolved时调用,第二个回调函数是Promise对象的状态变为Reject时调用。

    三、Promise.prototype.then()

      1、then方法返回的是一个新的Promise实例(注意,不是原来那个Promise实例)。因此可以采用链式写法,即then方法后面再调用另一个then方法。

    四、Promise.prototype.catch()

      1、Promise.prototype.catch方法是.then(null, rejection)的别名,用于指定发生错误时的回调函数。

      2、下面是对then()和catch()测试:

      

      

      

    五、Promise.all()

      1、Promise.all方法用于将多个Promise实例,包装成一个新的Promise实例

      2、语法:var p = Promise.all([p1, p2, p3]);

      3、Promise.all方法的参数可以不是数组,但必须具有Iterator接口,且返回的每个成员都是Promise实例

      4、如果不是,就会先调用下面讲到的Promise.resolve方法,将参数转为Promise实例

      5、p的状态由p1,p2,p3同时决定  //只有当p1,p2,p3同时为resolved时  p才是resolved

    六、Promise.race()

      1、Promise.race方法同样是将多个Promise实例,包装成一个新的Promise实例。

      2、语法:var p = Promise.race([p1,p2,p3]);

      3、只要p1p2p3之中有一个实例率先改变状态,p的状态就跟着改变。那个率先改变的Promise实例的返回值,就传递给p的回调函数。

    七、Promise.resolve()

      1、将现有对象转为Promise对象

      2、Promise.resolve('foo') 等价于 new Promise(resolve => resolve('foo'))

      3、参数的值:

    • 参数是一个Promise实例:原封不动地返回这个实例。
    • 参数是一个具有then方法的对象:会将这个对象转为Promise对象,然后就立即执行对象的then方法。
    • 参数不是具有then方法的对象,或根本就不是对象:返回一个新的Promise对象,状态为Resolved
    • 不带有任何参数:直接返回一个Resolved状态的Promise对象。

    八、Promise.reject()

       1、Promise.reject(reason)方法也会返回一个新的Promise实例,该实例的状态为rejected。它的参数用法与Promise.resolve方法完全一致。

    All rights reserved please indicate the source if reprint---吓尿了的大肥鼠
  • 相关阅读:
    鼠标移入移出事件改变图片的分辨率
    Qt 5.2.0 和 VS 2012集成
    java int and string convert
    判断密码强度
    MySQL 警告WARN: Establishing SSL connection without server's identity verification is not recommended.解决办法
    java中byte转换int时为何与0xff进行与运算
    java排序练习
    小数的取舍
    控制台输入一个数组,然后倒序输出
    非托管资源的释放
  • 原文地址:https://www.cnblogs.com/realsoul/p/5556085.html
Copyright © 2020-2023  润新知