码迷,mamicode.com
首页 > 其他好文 > 详细

es6 之 promise 对象

时间:2017-07-23 15:25:46      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:状态   ace   prot   code   func   异步操作   自动   rac   构造   

  • 异步编程

    • 传统方案:事件 + 回调函数
    • ES6 的新方案:Promise 对象
  • Promise 异步操作有 3 种状态

    • pending: 进行中
    • resolved: 已完成
    • rejected: 已失败
  • Promise 异步操作的状态变化仅限下面两种方式

  •          pending –> resolved
             pending –> rejected

创建一个 Promise 实例:

   promise 构造函数接收一个函数作为参数,并且这个函数有两个参数,这两个参数是也是两个函数,不过这两个函数由 JavaScript 引擎自动提供,不用自己部署,这两个函数通常表示为 resolve,reject

let  promise = new Promise(function(resolve, reject) {
  
  // ... some code
  if (/* 异步操作成功 */){
    resolve(value);
  } else {
    reject(error);
  }
});
  • resolve 函数的作用是: 将 Promise 对象的状态从 pending 变为 resolved,并将异步操作成功的结果,作为参数传递出去

  • reject 函数的作用是: 将 Promise 对象的状态从 pending 变为 rejected,并将异步操作报出的错误,作为参数传递出去

  • Promise 新建实例时,构造函数的函数参数会立即执行

    let promise = new Promise(function(resolve, reject) {
        resolve();
        console.log(‘new Promise‘);
    });
    promise.then(function() {
        console.log(‘Resolved.‘);
    });
    console.log(‘Hi!‘);
    // new Promise
    // Hi!
    // Resolved.

    基本方法:

  • Promise.prototype.then(onResolved, onRejected): 这个方法在 Promise 实例的状态发生改变时才进行调用

    • then 方法可以接受两个回调函数作为参数

      • 第一个回调函数在状态从 pending 变为 resolved 时才进行回调
      • 第二个回调函数在状态从 pending 变为 rejected 时才进行回调,可选
    promise.then(function(value){
        // success
    }, function(error){
        // error
    });

     

  • then 方法返回的是一个新的 Promise 实例(注意,不是原来的那个 Promise 实例),因此可以采用链式写法

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

     

  • Promise.prototype.catch(): 这个方法仅在 Promise 实例的状态从 pending 变为 rejected 时才进行调用

    • 相当于:Promise.prototype.then(null, onRejected)
    • catch 方法会捕获其前面所有发生的错误    
    • // 最佳写法
      promise.then(function(value){
          // success
      }).catch(function(error){
          // error
      });
      • Promise.all()
      • Promise.race()
      • Promise.reject()
      • Promise.resolve()
        待补充..........
        

es6 之 promise 对象

标签:状态   ace   prot   code   func   异步操作   自动   rac   构造   

原文地址:http://www.cnblogs.com/minna123/p/7224636.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!