关于问题Passing data between controllers in Angular JS?我遇到了我的ProductService正在执行某些$ http(RestFUL服务)并返回NULL的情况,因为回调函数没有完成。
因为评估了p.getProducts()函数并且从RestFUL服务获取数据的回调函数是不完整的,所以函数返回始终为null。
app.service('productService', function() {
p = this
p.productList = [];
var addProduct = function(newObj) {
productList.push(newObj);
}
p.getProducts = function(){
return $http(RestFUL Service,function(data){p.productList.push(data)});
}
return {
addProduct: addProduct,
getProducts: return p.getProducts();
};
});
我该如何解决这个问题?
答案 0 :(得分:0)
你必须玩回调。 http是异步操作,因此您无法立即返回有效结果。如何调用getProducts必须将一个函数(回调)设置为参数,该函数将在http完成时调用 - 当数据可用时。
app.service('productService', function() {
p = this
p.productList = [];
var addProduct = function(newObj) {
productList.push(newObj);
}
p.getProducts = function(callback){
$http(RestFUL Service,function(data){
p.productList.push(data)
callback(data);//do something with data
});
}
return {
addProduct: addProduct,
getProducts: p.getProducts
};
}
//invoking
getProducts(function(products){
//do something with products
});
答案 1 :(得分:0)
如果您将服务更改为更像
return {
addProduct: addProduct,
getProducts: p.getProducts
}
然后在控制器中你可以让它像那样工作
app.controller('myCtrl', function ($scope, productService) {
var products = null
productService.getProducts().then(function(response){
//do something with data returned
})
})
你的getProducts返回$ http,它本身会返回promise,这就是我在控制器中使用then
的原因