deferred.resolve giving error TypeError: undefined is not a function

deferred.resolve giving error TypeError: undefined is not a function

我正在使用 angularjs 和 cordova 工具来创建应用程序。

我创建了服务,其中包含调用 API 的代码。并且我想 return 回应我的 angular 控制器。

我的代码是, 服务,

JodoModule.factory('commonServices', function ($http, $q, $rootScope) {
    return {
        getServiceData: function (url) {
            $rootScope.loading = true;
            var deferred = $q.defer();
            var req = {
                method: 'GET',
                url: url
            }

            $http(req).success(function (data) {
                alert("data in service = " + JSON.stringify(data.Data));
                deferred.resolve(data);
            }).error(function (data, status, headers, config) {
                deferred.reject(status);
            });
            return deferred.promise;
        }
    };
});

我的控制器是,

commonServices.getServiceData("My url").
            success(function (data, status, headers, config) {
                alert(data);
            }).
            error(function (data, status, headers, config) {
                alert("Got error");
            });

在上面的代码中,在服务中,它显示了 JSON.stringify(data.Data)) 的提示消息;在成功块中,所以数据正在到来,但它没有执行 deferred.resolve(data);正确...

在 Web 工具栏中出现错误, ie. TypeError: undefined is not a function

我的 o/p 是:

{"status":"SUCCESS","Message":"success","Token":"","Data":[{"Id":17,"UserId":"477f1919-6b80-4804-a325-ac0cb05bcd3e","UserName":"honey","FirstName":"honey","LastName":null,"ProfilePic":false,"Status":2}]}

我该如何解决这个错误。 ?

普通的 $q promises 没有 .success().error() 方法,但无论如何您都不应该使用 deferred antipattern。相反,这样做:

JodoModule.factory('commonServices', function ($http, $rootScope) {
    return {
        getServiceData: function (url) {
            $rootScope.loading = true;
            var req = {
                method: 'GET',
                url: url
            };

            return $http(req).then(function (result) {
                alert("data in service = " + JSON.stringify(result.data.Data));
                return result.data;
            });
        }
    };
});

控制器:

commonServices.getServiceData("My url").
        then(function (data) {
            alert(data);
        }).
        catch(function (result) {
            alert("Got error");
        });

干净多了,嗯?