zoukankan      html  css  js  c++  java
  • javascript Promise

    Promise 

    回调函数真正的问题在于它剥夺了我们使用return和throw这些关键字的能力,而Promise很好地解决了这一切。

    Promise,就是一个对象,用来传递异步操作的消息。他代表了某个未来才会知道结果的事件(通常是一个异步操作),并且这个事件提供统一的API,可供进一步处理。

    Promise特点:

    1.对象的状态不受外界影响。Promise对象代表一个异步操作,有三种状态:Pending(进行中)、Resolved(已完成,又称Fulfiled)和Rejected(已失败)。只有异步操作的结果,可以决定当前是哪一种状态,任何其他操作都无法改变这个状态。

    2.一旦状态改变,就不会再变,任何时候得到的都是这个结果。Promise对象的状态改变,只有两种可能:从Pending变为Resolved和从Pending变为Rejected。只要这两种情况发生,状态就凝固了,不会在变,会一直保持这个结果。就算再对Promise对象添加回调函数,也会立即得到这个结果。

    有了Promise对象,就可以将异步操作已同步操作的流程便打出来,避免了层层嵌套的回调函数。此外,Promise对象提供统一的接口,是的控制异步操作更加容易。

    Promise也有缺点:无法取消Promise,一旦信件她就会立即执行,无法中途取消,其次,如果不设置回调函数,Promise内部将抛出错误,不会反映到外部,第三,当处于Pending时,无法得知目前进展到哪一阶段(刚刚开始还是即将完成)。

    var promise = new Promise(function(resolve,reject){
      if(/*异步操作成功*/){
        resolve(value);
        }else{
        reject(error);
        }
    });
    
    promise.then(function(value) {
      //success
    }, function(value) {
        //failure
    });

    Promise构造函数接受一个函数作为参数,该函数的两个参数分别是resolve方法和reject方法。

    如果异步操作成功,则用resolve方法将Promise对象的状态,从未完成变为完成。

    基本api

    1.Promise.resolve()

    2.Promise.reject()

    3.Promise.prototype.then()

    4.Promise.prototype.catch()

    5.Promise.all() //所有的完成

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

    6.Promise.race() //竞速,完成一个即可

    进阶

    promise的奇妙在于给与我们以前的return和throw,每个Promise都会提供一个then()函数和一个catch(),实际上是then(null,...)函数

    somePromise().then(function(){
        //do something
    });

    我们可以做三件事,

    1.return另一个Promise

    2.return一个同步的值(或者undefined)

    3.throw一个同步异常 throw newError('');

  • 相关阅读:
    洛谷 P1278 单词游戏 【状压dp】
    洛谷 P1854 花店橱窗布置 【dp】
    洛谷 P2258 子矩阵
    洛谷 P3102 [USACO14FEB]秘密代码Secret Code 【区间dp】
    洛谷U14200 Changing 题解 【杨辉三角】
    洛谷P3933 Chtholly Nota Seniorious 【二分 + 贪心 + 矩阵旋转】
    P3932 浮游大陆的68号岛 【线段树】
    洛谷P1273 有线电视网 【树上分组背包】
    NOI2013 矩阵游戏 【数论】
    洛谷P1268 树的重量 【构造 + 枚举】
  • 原文地址:https://www.cnblogs.com/chhom/p/6039123.html
Copyright © 2011-2022 走看看