看看我的代码示例:
我已经把它精简到(我认为是)最基本的东西,我正在设置一个错误 deferred.reject is not a function
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
来让它工作,如上所示谢谢!
最佳答案
您正在创建自定义 promise 并从您的方法中返回它,但意味着在处理它时,您正在使用 deferred
覆盖 $http.get
(自定义 promise 对象),这也返回具有 .then
和 .catch
方法的 promise (没有 resolve
和 reject
方法) )。由于该分配,您无法从 .resolve
对象访问 .reject
和 deferred
。
deferred = $http.get('my/api/method', { params: { id: id } })
应该只是
$http.get('my/api/method', { params: { id: id } })
关于javascript - AngularJS - 无法获得 $q.reject 并开始工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32954508/