将结果返回到父函数

时间:2015-07-28 04:44:13

标签: javascript angularjs asynchronous

我一直把头发拉出来。我正在使用离子自动完成功能,并希望通过工厂提取数据。

我的工厂......

myApp.factory('items', function($http){
   return {
      list: function(query,callback){
        $http.get('http://192.168.100.100/myApp/products/' + query).success(callback)
        }
        };
        });

获取我使用的数据..

   items.list(function(items) {
      $scope.items = items;
    });

自动填充请求数据的演示,例如..

  $scope.getTestItems = function (query) {
                    return {
                        items: [
                            {id: "1", name: query + "1", view: "view: " + query + "1"},
                            {id: "2", name: query + "2", view: "view: " + query + "2"},
                            {id: "3", name: query + "3", view: "view: " + query + "3"}]
                    };
                };

所以我认为这是一个可行的解决方案..

   $scope.getTestItems = items.list(query,function(items)
        {   
        console.log(items);
        return items;
        }
        )

但显然不是。我试过..

   $scope.getTestItems = function(query)
   {
   items.list(query,function(items)
        {   
        console.log(items);
        return items;
        }
        )
    }

这确实为我提供了结果的控制台,但这不会返回getTestItems

3 个答案:

答案 0 :(得分:0)

根据the docs(假设我在这里有正确的lib),你可以回复一个承诺

myApp.factory('items', function($http){
    return {
        list: function(query) {
            return $http.get(... + query).then(function(res) {
                return res.data; // unwrap the response data
                // see the "Returns" section at https://docs.angularjs.org/api/ng/service/$http#usage
            });
        }
    };
});

和控制器

$scope.getTestItems = function(query) {
    return items.list(query);
};

答案 1 :(得分:0)

这个怎么样

 list: function(query,callback){
    return $http.get('http://192.168.100.100/myApp/products/' + query)
 }

通过这种方式,您将从工厂返回承诺。

控制器

$scope.getTestItems = function(query){
  items.list(query).then(function(items){   
    console.log(items);
  });
}

一旦promise结算,回调就会执行。

答案 2 :(得分:0)

你可以试试这个,

myApp.factory('items', function($http){
   return {
      list: function(query){
       return $http.get('http://192.168.100.100/myApp/products/'+query);
        }
        };
        });

然后在您的控制器中

var promise = items.list(query);
promise.then(function(response){
//here we go
$scope.items = angular.fromJson(JSON.parse(response.data));
});