javascript-AngularJS-无法获得$q.reject并正常工作
作者:互联网
看一下我的代码示例:
我已经将其简化为(我认为是)基本要点,并且我正在设置推迟延迟错误.拒绝不是一个功能
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 } })
标签:angularjs,ajax,promise,javascript,angular-promise 来源: https://codeday.me/bug/20191027/1947452.html