@@ -27,7 +27,7 @@ ES6 规定,`Promise`对象是一个构造函数,用来生成`Promise`实例
2727下面代码创造了一个` Promise ` 实例。
2828
2929``` javascript 
30- var  promise =  new  Promise (function (resolve , reject ) {
30+ const  promise  =  new  Promise (function (resolve , reject ) {
3131  //  ... some code
3232
3333  if  (/*  异步操作成功 */ 
@@ -96,7 +96,7 @@ console.log('Hi!');
9696``` javascript 
9797function  loadImageAsync (url ) {
9898  return  new  Promise (function (resolve , reject ) {
99-     var  image =  new  Image ();
99+     const  image  =  new  Image ();
100100
101101    image .onload  =  function () {
102102      resolve (image);
@@ -116,16 +116,9 @@ function loadImageAsync(url) {
116116下面是一个用` Promise ` 对象实现的 Ajax 操作的例子。
117117
118118``` javascript 
119- var  getJSON  =  function (url ) {
120-   var  promise =  new  Promise (function (resolve , reject ){
121-     var  client =  new  XMLHttpRequest ();
122-     client .open (" GET" 
123-     client .onreadystatechange  =  handler;
124-     client .responseType  =  " json" 
125-     client .setRequestHeader (" Accept" " application/json" 
126-     client .send ();
127- 
128-     function  handler () {
119+ const  getJSON  =  function (url ) {
120+   const  promise  =  new  Promise (function (resolve , reject ){
121+     const  handler  =  function () {
129122      if  (this .readyState  !==  4 ) {
130123        return ;
131124      }
@@ -135,6 +128,13 @@ var getJSON = function(url) {
135128        reject (new  Error (this .statusText ));
136129      }
137130    };
131+     const  client  =  new  XMLHttpRequest ();
132+     client .open (" GET" 
133+     client .onreadystatechange  =  handler;
134+     client .responseType  =  " json" 
135+     client .setRequestHeader (" Accept" " application/json" 
136+     client .send ();
137+ 
138138  });
139139
140140  return  promise;
@@ -152,11 +152,11 @@ getJSON("/posts.json").then(function(json) {
152152如果调用` resolve ` 函数和` reject ` 函数时带有参数,那么它们的参数会被传递给回调函数。` reject ` 函数的参数通常是` Error ` 对象的实例,表示抛出的错误;` resolve ` 函数的参数除了正常的值以外,还可能是另一个 Promise 实例,比如像下面这样。
153153
154154``` javascript 
155- var  p1 =  new  Promise (function  (resolve , reject ) {
155+ const  p1  =  new  Promise (function  (resolve , reject ) {
156156  //  ...
157157});
158158
159- var  p2 =  new  Promise (function  (resolve , reject ) {
159+ const  p2  =  new  Promise (function  (resolve , reject ) {
160160  //  ...
161161  resolve (p1);
162162})
@@ -167,11 +167,11 @@ var p2 = new Promise(function (resolve, reject) {
167167注意,这时` p1 ` 的状态就会传递给` p2 ` ,也就是说,` p1 ` 的状态决定了` p2 ` 的状态。如果` p1 ` 的状态是` pending ` ,那么` p2 ` 的回调函数就会等待` p1 ` 的状态改变;如果` p1 ` 的状态已经是` resolved ` 或者` rejected ` ,那么` p2 ` 的回调函数将会立刻执行。
168168
169169``` javascript 
170- var  p1 =  new  Promise (function  (resolve , reject ) {
170+ const  p1  =  new  Promise (function  (resolve , reject ) {
171171  setTimeout (() =>  reject (new  Error (' fail' 3000 )
172172})
173173
174- var  p2 =  new  Promise (function  (resolve , reject ) {
174+ const  p2  =  new  Promise (function  (resolve , reject ) {
175175  setTimeout (() =>  resolve (p1), 1000 )
176176})
177177
@@ -276,7 +276,7 @@ p.then((val) => console.log('fulfilled:', val))
276276下面是一个例子。
277277
278278``` javascript 
279- var  promise =  new  Promise (function (resolve , reject ) {
279+ const  promise  =  new  Promise (function (resolve , reject ) {
280280  throw  new  Error (' test' 
281281});
282282promise .catch (function (error ) {
@@ -289,7 +289,7 @@ promise.catch(function(error) {
289289
290290``` javascript 
291291//  写法一
292- var  promise =  new  Promise (function (resolve , reject ) {
292+ const  promise  =  new  Promise (function (resolve , reject ) {
293293  try  {
294294    throw  new  Error (' test' 
295295  } catch (e) {
@@ -301,7 +301,7 @@ promise.catch(function(error) {
301301});
302302
303303//  写法二
304- var  promise =  new  Promise (function (resolve , reject ) {
304+ const  promise  =  new  Promise (function (resolve , reject ) {
305305  reject (new  Error (' test' 
306306});
307307promise .catch (function (error ) {
@@ -314,7 +314,7 @@ promise.catch(function(error) {
314314如果Promise状态已经变成` resolved ` ,再抛出错误是无效的。
315315
316316``` javascript 
317- var  promise =  new  Promise (function (resolve , reject ) {
317+ const  promise  =  new  Promise (function (resolve , reject ) {
318318  resolve (' ok' 
319319  throw  new  Error (' test' 
320320});
@@ -399,7 +399,7 @@ process.on('unhandledRejection', function (err, p) {
399399再看下面的例子。
400400
401401``` javascript 
402- var  promise =  new  Promise (function  (resolve , reject ) {
402+ const  promise  =  new  Promise (function  (resolve , reject ) {
403403  resolve (' ok' 
404404  setTimeout (function  () { throw  new  Error (' test' 0 )
405405});
@@ -413,7 +413,7 @@ promise.then(function (value) { console.log(value) });
413413一般总是建议,Promise 对象后面要跟` catch ` 方法,这样可以处理 Promise 内部发生的错误。` catch ` 方法返回的还是一个 Promise 对象,因此后面还可以接着调用` then ` 方法。
414414
415415``` javascript 
416- var  someAsyncThing  =  function () {
416+ const  someAsyncThing  =  function () {
417417  return  new  Promise (function (resolve , reject ) {
418418    //  下面一行会报错,因为x没有声明
419419    resolve (x +  2 );
@@ -449,7 +449,7 @@ Promise.resolve()
449449` catch ` 方法之中,还能再抛出错误。
450450
451451``` javascript 
452- var  someAsyncThing  =  function () {
452+ const  someAsyncThing  =  function () {
453453  return  new  Promise (function (resolve , reject ) {
454454    //  下面一行会报错,因为x没有声明
455455    resolve (x +  2 );
@@ -491,7 +491,7 @@ someAsyncThing().then(function() {
491491` Promise.all ` 方法用于将多个 Promise 实例,包装成一个新的 Promise 实例。
492492
493493``` javascript 
494- var  p =  Promise .all ([p1, p2, p3]);
494+ const  p  =  Promise .all ([p1, p2, p3]);
495495``` 
496496
497497上面代码中,` Promise.all ` 方法接受一个数组作为参数,` p1 ` 、` p2 ` 、` p3 ` 都是 Promise 实例,如果不是,就会先调用下面讲到的` Promise.resolve ` 方法,将参数转为 Promise 实例,再进一步处理。(` Promise.all ` 方法的参数可以不是数组,但必须具有 Iterator 接口,且返回的每个成员都是 Promise 实例。)
@@ -506,7 +506,7 @@ var p = Promise.all([p1, p2, p3]);
506506
507507``` javascript 
508508//  生成一个Promise对象的数组
509- var  promises =  [2 , 3 , 5 , 7 , 11 , 13 ].map (function  (id ) {
509+ const  promises  =  [2 , 3 , 5 , 7 , 11 , 13 ].map (function  (id ) {
510510  return  getJSON (' /post/' +  id +  " .json" 
511511});
512512
@@ -586,7 +586,7 @@ Promise.all([p1, p2])
586586` Promise.race ` 方法同样是将多个Promise实例,包装成一个新的Promise实例。
587587
588588``` javascript 
589- var  p =  Promise .race ([p1, p2, p3]);
589+ const  p  =  Promise .race ([p1, p2, p3]);
590590``` 
591591
592592上面代码中,只要` p1 ` 、` p2 ` 、` p3 ` 之中有一个实例率先改变状态,` p ` 的状态就跟着改变。那个率先改变的 Promise 实例的返回值,就传递给` p ` 的回调函数。
@@ -613,7 +613,7 @@ p.catch(error => console.log(error));
613613有时需要将现有对象转为Promise对象,` Promise.resolve ` 方法就起到这个作用。
614614
615615``` javascript 
616- var  jsPromise =  Promise .resolve ($ .ajax (' /whatever.json' 
616+ const  jsPromise  =  Promise .resolve ($ .ajax (' /whatever.json' 
617617``` 
618618
619619上面代码将jQuery生成的` deferred ` 对象,转为一个新的Promise对象。
@@ -666,7 +666,7 @@ p1.then(function(value) {
666666如果参数是一个原始值,或者是一个不具有` then ` 方法的对象,则` Promise.resolve ` 方法返回一个新的Promise对象,状态为` resolved ` 。
667667
668668``` javascript 
669- var  p =  Promise .resolve (' Hello' 
669+ const  p  =  Promise .resolve (' Hello' 
670670
671671p .then (function  (s ){
672672  console .log (s)
@@ -683,7 +683,7 @@ p.then(function (s){
683683所以,如果希望得到一个Promise对象,比较方便的方法就是直接调用` Promise.resolve ` 方法。
684684
685685``` javascript 
686- var  p =  Promise .resolve ();
686+ const  p  =  Promise .resolve ();
687687
688688p .then (function  () {
689689  //  ...
@@ -717,9 +717,9 @@ console.log('one');
717717` Promise.reject(reason) ` 方法也会返回一个新的 Promise 实例,该实例的状态为` rejected ` 。
718718
719719``` javascript 
720- var  p =  Promise .reject (' 出错了' 
720+ const  p  =  Promise .reject (' 出错了' 
721721//  等同于
722- var  p =  new  Promise ((resolve , reject ) =>  reject (' 出错了' 
722+ const  p  =  new  Promise ((resolve , reject ) =>  reject (' 出错了' 
723723
724724p .then (null , function  (s ) {
725725  console .log (s)
@@ -814,7 +814,7 @@ Promise.prototype.finally = function (callback) {
814814``` javascript 
815815const  preloadImage  =  function  (path ) {
816816  return  new  Promise (function  (resolve , reject ) {
817-     var  image =  new  Image ();
817+     const  image  =  new  Image ();
818818    image .onload   =  resolve;
819819    image .onerror  =  reject;
820820    image .src  =  path;
@@ -833,17 +833,17 @@ function getFoo () {
833833  });
834834}
835835
836- var  g  =  function *  () {
836+ const  g  =  function *  () {
837837  try  {
838-     var  foo =  yield  getFoo ();
838+     const  foo  =  yield  getFoo ();
839839    console .log (foo);
840840  } catch  (e) {
841841    console .log (e);
842842  }
843843};
844844
845845function  run  (generator ) {
846-   var  it =  generator ();
846+   const  it  =  generator ();
847847
848848  function  go (result ) {
849849    if  (result .done ) return  result .value ;
0 commit comments