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('');

  • 相关阅读:
    基础练习 龟兔赛跑预测
    SQL查询
    通讯录管理系统
    信号分解
    开源框架 openFrameworks
    开博了
    AES加密原理和AOE工程实践
    一文读懂AOE到底是什么!
    AoE 搭档 TensorFlow Lite ,让终端侧 AI 开发变得更加简单。
    AOE工程实践-银行卡OCR里的图像处理
  • 原文地址:https://www.cnblogs.com/chhom/p/6039123.html
Copyright © 2011-2022 走看看