看看我的代码示例:

我已经把它精简到(我认为是)最基本的东西,我正在设置一个错误 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 (没有 resolvereject 方法) )。由于该分配,您无法从 .resolve 对象访问 .rejectdeferred

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/

10-11 13:35