ES6-Promise

Promise是ES6中新增的内容,类似于容器。promise中包含未来才会结束的事件结果。

两个参数

promise构造函数接受一个函数function作为参数,这个函数的两个参数分别为resolve和reject。

  1. resolve函数是异步操作成功时调用,此时的promise状态由pending->resolved。
  2. reject函数是异步失败时调用。此时的promise对象状态由pending->rejected。
  3. 不管是resolve还是reject,状态改变后异步操作的结果都会作为参数传递下去。后续可以用then来接收,也可以用catch来接收。最终可选使用finally(),常用于清除数据。
  4. then()是然后呢的意思,对返回的promise对象中的数据进行链式操作,catch()是不然的意思,接收抛出对异常,避免卡死。
  5. then可以有一个,也可以有多个。
// 创建一个promise对象

const promise = new Promise((resolve, reject) => {
    // do something here ...
    if (success) {
        resolve(value); // fulfilled
    } else {
        reject(error); // rejected
    }
});
// 使用then方法,分别指定resolved状态和rejected状态的回调函数

promise.then(function(value) {
      // success
  }, function(error) {
      // failure
  });

All()方法

promise还有一个all()方法,可以对多个函数并行异步地执行,

成功:在所有异步操作执行完后才执行回调。

失败:任意一个promise失败,整体就立即返回失败。返回但错误信息是第一个失败的promise结果。

Promise.all([p1, p2, p3]).then(values => { 
  console.log(values);
}, reason => {
  console.log(reason)
});

// 三个异步操作返回的数据都在then里面。
// all会把所有异步操作的结果放进一个数组中传给then,就是上面的results。

all()多函数并行异步使用环境:一些游戏类的素材比较多的应用,打开网页时,预先加载需要用到的各种资源如图片、flash以及各种静态文件。所有的都加载完后,我们再进行页面的初始化。

race()方法

于all()类似,但all是等大家都完成再执行回调。但race是首先完成,就进行回调,不管其他但函数执行结果。