Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS服务不是';t返回数据_Javascript_Angularjs_Asynchronous - Fatal编程技术网

Javascript AngularJS服务不是';t返回数据

Javascript AngularJS服务不是';t返回数据,javascript,angularjs,asynchronous,Javascript,Angularjs,Asynchronous,我必须AngularJS服务将数据加载到我的应用程序中,这些应用程序的设置基本上是相同的,尽管一个可用,一个不可用 angular.module('myApp', ['myApp.filters', 'myApp.services', 'myApp.directives']) .service('uniqueLists', function ($http) { console.log("Getting Unique Lists") var itemsToList = [

我必须
AngularJS
服务将数据加载到我的应用程序中,这些应用程序的设置基本上是相同的,尽管一个可用,一个不可用

angular.module('myApp', ['myApp.filters', 'myApp.services', 'myApp.directives'])
  .service('uniqueLists', function ($http) {
    console.log("Getting Unique Lists")
    var itemsToList = [
      'designer',
      'store',
      'category'
    ]
    var uniqueLists = {};
    var promise = (function(){
      console.log("Inside Function")
      for (var i = 0; i<itemsToList.length; i++){
        var item = itemsToList[i];
        uniqueLists[item] = [];
        $http.get('/api/uniques/' + item, { cache: true}).
        success(function (data){
          uniqueLists[item] = data.query;
          console.log(i + " out of " + itemsToList.length);
          if (i == itemsToList.length -1){
            return uniqueLists;
          }
        });
      };
    })();
    return promise;
})
反过来,在我的应用程序中,当我尝试使用
uniquelist
时:

function homeCtrl($scope, $location, uniqueLists, userInfo){
  uniqueLists.then(function(obj){
  // Do stuff
  });
}
我得到错误
TypeError:Object[Object Object]没有方法'then'

有没有办法解决这个问题?
$http.get
api调用工作正常,所以我认为这只是一个阻塞/异步问题。

试试这个未经测试的代码

angular.module('myApp', [])
  .service('uniqueLists', function ($http, $q) {
  console.log("Getting Unique Lists")
  var itemsToList = [
    'designer',
    'store',
    'category']
  var uniqueLists = {};
  var promises = []

  console.log("Inside Function")
  for (var i = 0; i < itemsToList.length; i++) {
    var item = itemsToList[i];
    promises.push(http.get('/api/uniques/' + item, {
        cache: true
    }));
  };

  var defered = $q.defer();
  $q.all(promises).then(function (data) {
    for (var i = 0; i < data.length; i++) {
        var item = itemsToList[i];
        uniqueLists[item] = data[i].query;
    }
    defered.resolve(uniqueLists);
    }, function (error) {
    defered.reject(error)
  });

  return defered.promise;
 })
angular.module('myApp',[])
.service('uniquelist',函数($http,$q){
log(“获取唯一列表”)
var itemsToList=[
“设计师”,
“商店”,
“类别”]
var uniquelist={};
var承诺=[]
console.log(“内部函数”)
对于(var i=0;i
angular.module('myApp', [])
  .service('uniqueLists', function ($http, $q) {
  console.log("Getting Unique Lists")
  var itemsToList = [
    'designer',
    'store',
    'category']
  var uniqueLists = {};
  var promises = []

  console.log("Inside Function")
  for (var i = 0; i < itemsToList.length; i++) {
    var item = itemsToList[i];
    promises.push(http.get('/api/uniques/' + item, {
        cache: true
    }));
  };

  var defered = $q.defer();
  $q.all(promises).then(function (data) {
    for (var i = 0; i < data.length; i++) {
        var item = itemsToList[i];
        uniqueLists[item] = data[i].query;
    }
    defered.resolve(uniqueLists);
    }, function (error) {
    defered.reject(error)
  });

  return defered.promise;
 })