deferred.resolve给出错误TypeError:undefined不是函数

时间:2015-03-03 16:22:12

标签: angularjs cordova angularjs-scope angularjs-service angularjs-factory

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

我创建了服务,其中包含用于调用API的代码。并且我希望将响应返回到我的角度控制器。

我的代码是, 服务,

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)的elert消息;在成功块中,所以数据正在进行,但它没有执行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}]}

如何解决此错误。 ?

1 个答案:

答案 0 :(得分:2)

普通$ q承诺没有.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");
        });

相当干净,是吗?