【转】AngularJS领域中的Promise

Promise是一个接口,它用来处理的对象具有这样的特点:在未来的某一时刻(主要是异步调用)

会从服务端返回或者被填充属性。其核心是,promise是一个带有then()函数的对象。

为了展示它的优点,来看一个例子其中需要获取用户当前的配置文件:

1 var currentProfile=null;
2 var username='something';
3 fetchServerConfig(function(serverConfig){
4     fetchUserProfiles(serverConfig.USER_PROFILES,username,
5         function(profiles){
6             currentProfile=profiles.currentProfile;
7         });
8 });

上面这种处理方式存在一些问题:

  1.对于代码缩进来说,这种代码就是一个噩梦,尤器在需要链式调用很多次的时候。

  2.处于回调和函数之间的错误报告非常容易丢失,除非你在每一个步骤中都手动处理错误。

  3.如果需要使用currentProfile对象来做一些事情,那么你需要在最内层的回调中封装真正想要

   实现的逻辑,要么直接封装,要么通过一个单独的函数来封装。

promise机制可以很好地解决这些问题。在深入了解其运行机制之前,来看看如何使用promise实现

同样的事情:

1 var currentProfile=fetchServerConfig().then(function(serverConfig){
2     return fetchUserProfiles(serverConfig.USER_PROFILES,username);
3 }).then(function(){
4     return profiles.currentProfile;
5 },function(err){});

使用promise机制有如下优点:

  1.可以对函数进行链式调用,所以你不会陷入代码缩进噩梦中。

  2.在调用链的过程中,可以保证上一个函数调用完成后才会调用下一个函数。

  3.每一个then()调用都带有两个参数(两个都是函数)。第一个是成功之后的回调,第二个

   是出错之后的处理器。

  4.如果调用链中出现了错误,错误将会被冒泡传递到其余的错误处理函数中,所以,最终来说

   所有错误都可以在任意一个回调函数中进行处理

 

posted @ 2016-08-21 01:18  水流目  阅读(255)  评论(0编辑  收藏  举报