ES6学习之promise对象

来源:互联网 发布:java中注解的作用 编辑:程序博客网 时间:2024/05/19 19:41

ES6-Promise

[TOC]
本文用来记录一下学习ES6的promise对象,方便用的时候直接找到。

-promise含义
- promise基本用法
- promise基本用法实例
- promise API


promise含义

 ES6原生提供了promise对象,该对象就是一容器,内部包含有未来某个时间结束的动作。

promise基本用法

ES6 规定,Promise对象是一个构造函数,用来生成Promise实例。
如下实例:

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

Promise构造函数接受一个函数作为参数,该函数的两个参数分别是resolve和reject。它们是两个函数,由 JavaScript 引擎提供,不用自己部署。resolve表示promise的状态的成功,reject表示promise的状态的失败。

promise实例生成之后可以调用then方法,传入promise对象的两个回调函数,其中第二个是非必须的。
如下:

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

promise基本用法实例

promise基本用法实例 封装:

var getJSON = function (url) {    var promise = new Promise(function (resolve, reject) {        var client = new XMLHttpRequest();        client.open("GET", url);        client.onreadystatechange = handler;        client.responseType = "json";        client.setRequestHeader("Accept", "application/json");        client.send();        function handler() {            if (this.readyState !== 4) {                return;            }            if (this.status === 200) {                resolve(this.response);            } else {                reject(new Error(this.statusText));            }        };    });    return promise;};getJSON("/posts.json").then(function (json) {    console.log('Contents: ' + json);}, function (error) {    console.error('出错了', error);});

promise API

promise当然有自己的api,简单介绍一下个人常用的API:
1. Promise.prototype.then() //之前已经介绍,不再详解
2. Promise.prototype.catch() //该方法可用来接收reject参数,同时也可以用来捕获Promise中的error,故推荐用catch来写。
:如下:

getJSON("/posts.json").then(function (json) {    console.log('Contents: ' + json);}).catch(function (error) {    console.error('出错了', error);});
  1. Promise.all() //该方法可用于进行同步操作,将多个Promise对象包装成一个Promise对象,所有Promise对象全部resolve才出发resolve,有一个reject,则reject,可以想象为&&操作符的逻辑。
    如下:
    // 生成一个Promise对象的数组    var promises = [2, 3, 5, 7, 11, 13].map(function (id) {      return getJSON('/post/' + id + ".json");    });    Promise.all(promises).then(function (posts) {      // ...    }).catch(function(reason){      // ...    });
  1. done()
    处于整个Promise链的最后,用来捕获错误,可像then一样来使用。

    asyncFunc()
    .then(f1)
    .catch(r1)
    .then(f2)
    .done();
  2. finally()
    类似Java的try…catch…finally,无论如何最后都会执行的,与done的区别在于可传入普通函数。

学自: http://es6.ruanyifeng.com/#docs/promise

原创粉丝点击