2017-06-22 7 views
0

誰かがこのコードで私を助けることができますか?私はAngularJSサービスはhttp.getから値を返しません

var products = {"id": 3}; 

コントローラリターンで戻り値、機能に問題を持っている私はhttp.getから値を収集したい、誰かがどのようにそれを行うために私に言うことができます? コントローラ:あなたが約束を使用して解決する代わりに、HTTP成功する前に製品を返却している

var myServices = angular.module('myServices', []); 
myServices.service('getListProducts', ['$http', function ($http) { 
var products = {"id": 3}; 
this.loadProducts = function() { 
    $http.get("/products/list").then(function (resp) { 
     products = resp.data; 
    }) 
    return products; 
} 
}]); 
+1

[非同期呼び出しから応答を返すにはどうすればいいですか?](https://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-コール) –

+0

*有効なURLはありません*? –

答えて

0

$scope.product = {}; 
$scope.init = function() { 
    $scope.loadProducts() 
} 

$scope.loadProducts = function() { 
    // $http.get("/products/list").then(function (resp) { 
    // $scope.products = resp.data; 
    // }) 
    $scope.products = getListProducts.loadProducts(); 
} 

サービス時にHTTP成功

$scope.product = {}; 
$scope.init = function() { 
    $scope.loadProducts() 
} 

$scope.loadProducts = function() { 
    // $http.get("/products/list").then(function (resp) { 
    // $scope.products = resp.data; 
    // }) 
    $scope.productPromise = getListProducts.loadProducts(); 
     productPromise..then(function (resp) { 
     $scope.products = resp.data; 
    }); 
} 

サービス

var myServices = angular.module('myServices', []); 
myServices.service('getListProducts', ['$http', function ($http) { 
var products = {"id": 3}; 
this.loadProducts = function() { 
    return $http.get("/products/list"); 

} 
}]); 
0

非同期コードの直列化を強制する約束を利用する。あなたが同様のエラーコールバックを提供することができます

getListProducts.loadProducts().then(function(data){ 
    //success callback 
    $scope.products = data; 
}); 

:として

this.loadProducts = function() { 
    var getProducts = new Promise(function(resolve,reject){ 
     $http.get("/products/list").then(function (resp) { 
      resolve(resp.data); 
     }) 
    }); 
    return getProducts; 
}; 

そして、あなたのコントローラの方法:として

は、あなたのサービスメソッドをリファクタリング。 これが役立つことを願っています!

0

サービスから値を返すには、約束を使用する必要があります。 サービスで$qを使用することができます。関数が非同期で実行されるのに役立ちます。私は、これはあなたを助けるでしょう願ってい

$scope.loadProducts = function() { 

getListProducts.loadProducts().then(function(response){ 
    $scope.products=response; 
},function(error){ 
    //your processing logic 
}); 
} 

myServices.service('getListProducts', ['$http','$q', function ($http,$q) { 
    var products = {"id": 3}; 
    this.loadProducts = function() { 
    var deferred = $q.defer(); 

    $http.get("/products/list").then(function (resp) { 
     products = resp.data; 
     deferred.resolve(products); 
    },function(error){ 
     deferred.reject(error); 
    }); 
    return deferred.promise; 
} 
}]); 

とコントローラでのあなたの方法はsuccesserrorコールバックを処理する必要があります。

関連する問題