ECMAScriptPromise对象

1.Promise思想:每一个异步任务就返一个Promise对象,由于是当下回到,所以可以以同步操作的流程。这个Promises对象来一个then方法,允许指定回调函数,在异步任务到位后调用。

// 传统写法
step1(function (value1) {
  step2(value1, function(value2) {
    step3(value2, function(value3) {
      step4(value3, function(value4) {
        // ...
      });
    });
  });
});

// Promises的写法
(new Promise(step1))
  .then(step2)
  .then(step3)
  .then(step4);

传统的回调函数写法使得代码混成一团,变得横向发展而非是往下发展。Promises规范就是是为解决这题目如提出的,目标是利用正规的程序流程(同步),来处理异步操作。它预先回来一个Promise对象,后面的操作以同的点子,寄存在斯目标方面。等交异步操作发生了结果,再实践首寄在其点的其余操作。

ECMAScript
6用那描绘副语言专业,因此目前JavaScript语言原生支持Promise对象。

2.Promise接口

  接口状态

(1)未完成 pending

(2)完成 resolved或者fulfilled

(3)失败 rejected

  状态变化路径

(1)未完成-完成

(2)未完成-失败

  Promise对象最终结出

(1)异步操作成,Promise对象传回一个值,状态成为resolved

(2)异步操作失败,Promise对象抛来荒唐,状态变为rejected

  then方法

 
Promise对象下then方法添加回调函数,then方法可以接受两个回调函数,一个凡异步操作成(状态呢resolved)时的回调函数,一个凡是异步操作失败(状态为rejected)时的回调函数。

  then方法可链式调用:

1   po
2   .then(step1)
3   .then(step2)
4   .then(step3)
5   .then(
6     console.log,
7     console.error
8   );

方代码中,po的状态而变成resolved,就相继调用后面每一个then点名的回调函数,每一样步都不能不等交面前一模一样步成功,才见面实行。最后一个then措施的回调函数console.logconsole.error,用法达成有一致沾主要之分。console.log特显示回调函数step3的回到值,而console.error足显示step1step2step3里面任意一个生出的荒唐。也就是说,假定step1操作失败,抛来一个左,这时step2step3犹无见面再也实践了(因为它们是操作成的回调函数,而未是操作失败的回调函数)。Promises对象开始搜寻,接下第一个操作失败时的回调函数,在上面代码中凡console.error。这就是说,Promises对象的缪有传递性

3.Promise对象的更动

ES6资了原生的Promise构造函数,用来变化Promise实例。

1 var promise = new Promise(function(resolve, reject){
2     //异步操作的代码
3     if(/*异步操作成功*/){
4         resolve(value);
5     }else{
6         reject(error);
7     }
8 })        

resolve函数的企图是,将Promise对象的状态从“未成功”变为“成功”(即由Pending变为Resolved),在异步操作成时调用,并以异步操作的结果,作为参数传递出去;reject函数的意图是,将Promise对象的状态从“未到位”变为“失败”(即从Pending变为Rejected),在异步操作失败时调用,并将异步操作报出的荒谬,作为参数传递出去。

4.Promise用法辨析

(1)finalHandler扭曲ECMAScript调函数的参数是doSomethingElse函数的运转结果

1 doSomething().then(function () {
2   return doSomethingElse();
3 }).then(finalHandler);

(2)finalHandler扭转调函数的参数是undefined

1 doSomething().then(function () {
2   doSomethingElse();
3   return;
4 }).then(finalHandler);

(3)finalHandler反过来调函数的参数,是doSomethingElse函数返回的回调函数的周转结果

1   doSomething().then(doSomethingElse())
2   .then(finalHandler);

(4)doSomethingElse会晤接至doSomething()回到的结果

1   doSomething().then(doSomethingElse)
2   .then(finalHandler);

5.Promise优缺点

瑜:让回调函数变成了标准的链式写法,程序流程可以扣押得可怜了解。如果一个职责都成功,再补充加回调函数,该回调函数会即刻实施。所以,你不用担心是不是去了某事件或信号。

短:编写和晓还相对比难。

 

要发生不当,请而斧正!

参考文档:

Promise