编程语言
首页 > 编程语言> > javascript-AngularJS-无法获得$q.reject并正常工作

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