All*_*nph 5 javascript nested resolve promise angularjs
我有一个用户服务。我想创建一个方法来利用我构建的另一个服务。此服务有两种方法。getUser()和getCurrentUser()。getCurrentUser()利用获取 UID 的注入服务。它使用返回的 UID 来运行该getUser()方法。我的问题是我无法getCurrentUser()返回第二层承诺。
这个问题有点难以解释。这是代码...
svs.service("usersService", function($rootScope, $http, loginService, alertBoxService) {
var self = this;
self.getUser = function(identifier, column) {
if (typeof(column) === 'undefined') column = "uid";
return $http.get($rootScope.api + "/getUser/" + identifier + "/" + column);
}
self.getCurrentUser = function() {
var currentUserPromise;
loginService.getCurrentUid().then(
function(response) {
if (response.data === "false") {
alertBoxService.trigger($rootScope.unexpectedApiResponse);
} else {
console.log(self.getUser(response.data));
currentUserPromise = self.getUser(response.data);
}
}, function(response) {
alertBoxService.trigger($rootScope.asyncFailed);
}
);
return currentUserPromise;
}
});
Run Code Online (Sandbox Code Playgroud)
将承诺串联起来,但也不要忘记将拒绝串联起来......
self.getCurrentUser = function() {
return loginService.getCurrentUid().then(function(response) {
if (response.data === 'false') {
alertBoxService.trigger($rootScope.unexpectedApiResponse);
return $q.reject(response); // convert into a rejection
}
return self.getUser(response.data); // chain the promise resolution
}, function(response) {
alertBoxService.trigger($rootScope.asyncFailed);
return $q.reject(response); // chain the rejections
});
}
Run Code Online (Sandbox Code Playgroud)
$q当然,您需要注入该服务。
正如Bergi 善意指出的那样,您还可以通过抛出错误而不是使用来拒绝承诺$q.reject,例如
throw response;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3440 次 |
| 最近记录: |