Page 188 - AngularJS权威教程
P. 188

168  第 17 章  promise






                      第17章
                                       promise








                 Angular事件系统(我们会在第24章讨论它)给Angular应用提供了很多强大功能。它给我们
             的最强大功能之一是promise的自动执行。


             17.1 什么是 promise


                 promise是一种用异步方式处理值(或者非值)的方法。promise是对象,代表了一个函数最
             终可能的返回值或者抛出的异常。在与远程对象打交道时,promise会非常有用,可以把它们看
             作远程对象的一个代理。
                 习惯上,JavaScript使用闭包或者回调来响应非同步的有意义的数据,比如页面加载之后的
             XHR请求。我们可以跟数据进行交互,就好像它已经返回了一样,而不需要依赖于回调函数的
             触发。
                 回调已经被使用了很长时间,但开发人员用它时都会很痛苦。回调使得调用不一致,得不到
             保证,当依赖于其他回调时,它们篡改代码的流程,通常会让调试变得非常难。每一步调用之后,
             都需要显式处理错误。

                 在执行异步方法时触发一个函数,然后期待一个回调能运行起来。与之不同的是,promise
             提供了另外一种抽象:这些函数返回promise对象。
                 例如,在传统的回调代码中,我们可能会有一个方法,用户使用该方法向他的朋友发送数据。

                  // 示例回调代码
                  User.get(fromId, {
                      success: function(err, user) {
                          if (err) return {error: err};
                          user.friends.find(toId, function(err, friend) {
                              if (err) return {error: err};
                              user.sendMessage(friend, message, callback);
                          });
                      },
                      failure: function(err) {
                          return {error: err}
                      }
                  });

                 这个回调金字塔已经失控了,而且我们还没有加入健壮的错误处理代码。此外,在被调用的
             回调内部,也需要知道参数的顺序。
                 刚才基于promise版本的代码看上去更接近于:
   183   184   185   186   187   188   189   190   191   192   193