首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >工厂不执行$http.get

工厂不执行$http.get
EN

Stack Overflow用户
提问于 2014-10-27 15:12:34
回答 2查看 87关注 0票数 0

我的工厂似乎没有执行我的$http.get。这是我的控制器:

代码语言:javascript
复制
app.factory("myService", function($http) {

    var myService = {
        retrieve: function(id, type) {

        var retrievedData = {
            device: {},
            childDevices: [],
            error: {}
        };
        .
        .
        .
        $http.get(url, headers)
        .success(function(data, status) {
            // some data post-processing
            // some logs
        })
        .error(function(data, status) {
            // some data post-processing
            // some logs
        });

        return retrievedData;

    };

    return myService;

});

$http.get中的日志未打印。

我在需要使用promise的地方读到过,但我看到的大多数示例都直接返回$http.get。我不想立即返回$http.get,因为我需要在工厂中而不是在控制器中对数据进行一些修改。

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2014-10-27 15:21:12

因为当您返回retrievedData时,它还没有被检索到。这就是为什么你应该使用promises:

代码语言:javascript
复制
   app.factory("myService", function ($http,$q) {
     var myService = {
     retrieve: function (id, type) {
        var deferred = $q.defer();
        var retrievedData = {
            device: {},
            childDevices: [],
            error: {}
        };

        $http.get(url, headers).then(function (data) {
                // success do your success things here and return data 
                deferred.resolve(data);
            },
            function (err) {
                deferred.reject(err);
            });


        return deferred.promise;

      }
  };

  return myService;

});

//用法

代码语言:javascript
复制
myService.retrive(id,type).then(function(data){
// data retrived
})
票数 -1
EN

Stack Overflow用户

发布于 2014-10-27 15:45:11

在angular js中,promise用于返回来自后台的响应。在你的代码中,响应前返回retrievedData来自后端。这就是为什么angular使用promise。因此,当响应来自后端时,它执行成功块和成功块,并使用deferred.resolve(data)解析承诺。当错误发生时,error block get execute,它拒绝promise deferred.reject(err) .but,当它解析promise时,它返回响应数据。

服务代码:

代码语言:javascript
复制
app.factory("myService", function ($http,$q) {
var myService = {
    retrieve: function (id, type) {
        var deferred = $q.defer();
        var retrievedData = {
            device: {},
            childDevices: [],
            error: {}
        };

        $http.get(url, headers).then(function (data) {
                // after success this block execute
                deferred.resolve(data);
            },
            function (err) {
              //after error this block execute
                deferred.reject(err);
            });


        return deferred.promise;

    }
};

return myService;
});

控制器代码:

代码语言:javascript
复制
//calling retrive function 
myService.retrive(id,type).then(fucntion(data){
  ...
})
.catch(function(){
...
})
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26582614

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档