javascript Promise

Promise 

回调函数真正的问题在于它剥夺了我们使用return和throw这些关键字的能力,而Promise很好地解决了这一切。

Promise,就是一个对象,用来传递异步操作的消息。他代表了某个未来才会知道结果的事件(通常是一个异步操作),并且这个事件提供统一的API,可供进一步处理。

Promise特点:

1.对象的状态不受外界影响。Promise对象代表一个异步操作,有三种状态:Pending(进行中)、Resolved(已完成,又称Fulfiled)和Rejected(已失败)。只有异步操作的结果,可以决定当前是哪一种状态,任何其他操作都无法改变这个状态。

2.一旦状态改变,就不会再变,任何时候得到的都是这个结果。Promise对象的状态改变,只有两种可能:从Pending变为Resolved和从Pending变为Rejected。只要这两种情况发生,状态就凝固了,不会在变,会一直保持这个结果。就算再对Promise对象添加回调函数,也会立即得到这个结果。

有了Promise对象,就可以将异步操作已同步操作的流程便打出来,避免了层层嵌套的回调函数。此外,Promise对象提供统一的接口,是的控制异步操作更加容易。

Promise也有缺点:无法取消Promise,一旦信件她就会立即执行,无法中途取消,其次,如果不设置回调函数,Promise内部将抛出错误,不会反映到外部,第三,当处于Pending时,无法得知目前进展到哪一阶段(刚刚开始还是即将完成)。

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

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

Promise构造函数接受一个函数作为参数,该函数的两个参数分别是resolve方法和reject方法。

如果异步操作成功,则用resolve方法将Promise对象的状态,从未完成变为完成。

 

基本api

1.Promise.resolve()

2.Promise.reject()

3.Promise.prototype.then()

4.Promise.prototype.catch()

5.Promise.all() //所有的完成

var p = Promise.all([p1,p2,p3]);

6.Promise.race() //竞速,完成一个即可

 

进阶

promise的奇妙在于给与我们以前的return和throw,每个Promise都会提供一个then()函数和一个catch(),实际上是then(null,...)函数

somePromise().then(function(){
    //do something
});

我们可以做三件事,

1.return另一个Promise

2.return一个同步的值(或者undefined)

3.throw一个同步异常 throw newError('');

posted @ 2016-11-07 15:33  ChHM  阅读(186)  评论(0编辑  收藏  举报