2016-09-25 37 views
0

基本上我有一个角度资源API服务如下。我有使用嵌套链接方法如下,我认为是没有编码的角度那么好(尤其是当有需要多个链接)重构角度资源链接

angular.module('user') 
.factory('UserAPI', ['$resource'], 
    function ($resource) { 
     return $resource('User', {}, 
     { 
      GetUserDetail1: { 
       method: 'GET', 
       url: url1 
      }, 
      GetUserDetail2: { 
       method: 'GET', 
       url: url2 
      } 
     } 
    } 
) 

UserAPI.GetUserDetail1({ ID: id }).$promise.then(function (res) { 
    UserAPI.GetUserDetail2({ ID: res.userID }).$promise.then(function (res1) { 

    }, function (errRes1) { 

    }); 
}, function (errRes) { 

}); 

所以,我现在想重构代码如下,但我不知道这是否可以完成。

function getUserDetail2 (res) { 

}; 

UserAPI.GetUserDetails1({ ID: id}) 
.then(getUserDetail2(res)) 
.catch(function (errRes) { 
    // catch error if any error occur 
}); 

回答

1

你只需要传递函数的引用,而不是在那里调用它。

UserAPI.GetUserDetails1({ ID: id}) 
.then(getUserDetail2) //passed getUserDetail2 method here 
.catch(function (errRes) { 
    // catch error if any error occur 
}); 
+0

我明白了。谢谢。你介意告诉我们是否所有的errorResponse都会被捕获吗?函数(errRes)和catch(errRes)之间有什么区别?两者都返回相同的值吗? – vincentsty

+0

@vincentsty我强烈建议你通过[本文](http://odetocode.com/blogs/scott/archive/2015/10/01/javascript-promises-and-error-handling.aspx) –