看一下我的代码示例:
我已经将其简化为(我认为是)基本要点,并且我正在设置推迟延迟错误.拒绝不是一个功能
angular
.module('myApp')
.service('myService', MyService);
MyService.$inject = ['$http', '$q'];
function MyService($http, $q) {
var self = this;
self.getResult = getResult;
function getResult(id) {
var deferred = $q.defer();
deferred = $http.get('my/api/method', { params: { id: id } })
.then(getResultCompleted)
.catch(getResultFailed);
function getResultCompleted(response) {
if (response.data.ID > 0) {
deferred.resolve(response.data);
} else {
deferred.reject(response);
}
}
function getResultFailed(response) {
deferred.reject(response);
}
return deferred.promise;
}
}
注意:我知道我可以通过简单地返回$http调用的结果来使它工作,但是为了理解这些Promise对象,我想看看是否可以通过声明并返回deferred来使它工作,如上所示.
谢谢!
解决方法:
您正在创建自定义诺言并从您的方法中返回它,但意味着在处理它时,您将使用$http.get覆盖deferred(自定义诺言对象),这也会返回具有.then&的诺言. .catch方法(没有解析和拒绝方法).由于存在该分配,因此您将无法从延迟对象访问.resolve和.reject.
deferred = $http.get('my/api/method', { params: { id: id } })
应该只是
$http.get('my/api/method', { params: { id: id } })
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。