AngularJS Promise

来源:互联网 发布:数据库设计方面的书籍 编辑:程序博客网 时间:2024/05/16 17:01

首先看一下异步函数经常遇到的一个问题:

fetchUser(function(user) {  fetchUserPermissions(user, function(permissions) {    fetchUserListData(user, permissions, function(list) {      // 处理数据列表    });  });});

从本质上说,异步返回的方式和程序同步处理之间存在冲突,从而导致了多重嵌套的函数,这样既难追踪当前上下文,也会使错误变得麻烦。
下面我们使用Promise方案提供的then概念,重写这段代码:

// 创建一个延迟响应var deferred = $q.defer();var fetchUser = function() {  //再进行异步调用之后,使用响应值调用deferred.resolver  deferred.resolver(user);  //在出错的情况下调用deferred.reject  deferred.reject('Reason for failure');}deferred.promise.then(fetchUser)  .then(fetchUserPermissions)  .then(fetchUserListData)  .then(function(list)) {    //处理数据列表  }, function(errorReason) {    //在任何一个步骤中发生的错误,都可以在这里处理  });

可以感觉的到代码更加整洁了,并且提供了链式的作用域,以及单一的出错点处理。所有的这一切只需要你注入$q服务即可。

Promise接口从以下方面对异步请求做出规范:

- 异步请求返回一个promise,而不是返回具体值。- Promise带有一个then函数,这个函数有两个参数:第一个参数是处理‘resolved’和‘success’事件  的函数,第二个参数是处理‘rejected’和‘failure’事件的函数。调用这两个函数时将会把结果或拒绝  的原因作为参数传递进去。- 只要返回的结果是合法的,接口就可以保证这两个函数中的一个会被调用。
0 0
原创粉丝点击