ES6学习之promise对象

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值