ES6——Promise

65 阅读2分钟

概述:

1.Promise是es6提供的一个构造函数(关键字),同步函数,也是一个数据容器(自己产生数据);

2.使用方法:new Promise(),注意首写字母一定要大写;

3.取出promise数据容器,用then函数

4.then函数是一个异步非阻塞函数

promise对象有以下两个特点:

1.对象的状态不受外界影响。promise对象带编一个异步操作,有三种状态:pending(进行中)、fulfilled(已成功)、rejected(已失败)。只有异步操作的结果,可以决定当前是哪一种状态,任何其它操作都无法改变这个状态。

2.一旦状态改变,就不会再变,任何时候都可以得到这个结果。Promise对象的状态改变,只有两种可能:从pending变为fulfilled和从pending变为rejected。只要这两种情况发生,状态就凝固了,不会再变了,会一直保持这个结果,这时就称为 resolved(已定型)。如果改变已经发生了,你再对Promise对象添加回调函数,也会立即得到这个结果。这与事件(Event)完全不同,事件的特点是,如果你错过了它,再去监听,是得不到结果的。

有了Promise对象,就可以将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数。

补充:

  • 数据容器:map set arr object被动产生数据,给它添加数据

  • new Error():是正确的业务对象,但它是js中的err类型的对象

使用方法:

 var p1=new Promise(
      function(resolve,reject){//n1、n2只能调用一个
          if(条件){
   resolve()//代表触发,让promise对象内部产生正确的数据,p1.then()就为:p1.then(function f1(){})
             }else if(条件){
   reject()//代表触发,告知promise体系 产生了数据,但是是reject触发,说明是业务错误的数据,p1.then()就为:p1.then(function f2(){})
           }
     });
     p1.then(function f1(data){},function f2(err){})
     

代码解释:

  1. p1.then()的返回值是一个新的Promise对象,then函数是一个异步非阻塞函数

  2. p1数据容器取数据用then函数。

  3. data是p1产生的数据,并不是n1()传入的值

  4. function f1(data){}:取出正确的数据

  5. reject() 可以用 throw “错误” 代替

  6. 抓取错误,处理错误:

    1.function f2(err){} 
    2.catch方法(promise对象可以调用,可以连调)
    

n1和n2是官方定义的函数,与then()里的function无关。

注意:then传入的回调函数的返回值是:

1.如果是一个promise对象,那么就是它;

2.如果不是一个promise对象,那么就会把函数的结果包装为一个生成数据了的promise对象

理解代码:

image.png

image.png