2015-07-10 85 views
0

在我的主要模块中,我想创建一个服务来分析一个json文件并将内容推送到一个数组,然后我想让服务返回数组所以任何控制器都可以轻松访问。这个问题是在函数运行前的$ HTTP请求完成,因此始终返回一个空数组

dashModule.factory('dataFetch', function($http) { 
    var emailArray = []; 

    $http.get('../data/emails.json').success(function log(obj) { 
     for (var i = 0; i < obj.length; i++) { 
      emailArray[i] = obj[i]; 
     } 
    }); 

    return { 
     test: function() { 
      return emailArray; 
     } 
    }; 
}); 
+0

你应该尝试使用.error注销错误(数据,状态,头文件...)。乍一看,这应该工作。所以我认为你得到json数据的方式有问题,或者json数据不可用。 – courtyen

+0

如果我console.log(OBJ)在我的循环它显示正确的JSON数据,console.log(emailArray)在for循环数组显示,因为它应该。只有当它返回它绕过$ http请求 –

+0

可能重复[如何从异步调用返回响应?](http://stackoverflow.com/questions/14220321/how-to-return-the-response -from-an-asynchronous-call) – Phil

回答

4

使用的承诺,如:

dashModule.factory('dataFetchService', function($http) { 
    var myReq = function() { 
     return $http.get('../data/emails.json').then(function(response){ 
      return response.data; 
     }); 
    }; 
    return { myReq: myReq }; 
}); 

function getMyReq($scope, dataFetchService) { 
    var myReqPromise = dataFetchService. myReq(); 
    myReqPromise.then(function(result) {   
     console.log(result); 
    }); 
} 
+0

我将getMyReq函数放在控制器中吗? –

+0

@AnfaA是的,进入控制器 –