Javascript 角度$q.defer()返回对象{then:function}
我有以下Angular文件,其中我尝试使用$http访问数据库,然后在$scope变量中使用此数据(显示在网页中)。问题是我不能得到$q.defer来运行,因为我认为它应该运行。$http函数中的console.log()记录包含从数据库返回的数据的对象。但是,当我调用函数时,它会记录Javascript 角度$q.defer()返回对象{then:function},javascript,angularjs,Javascript,Angularjs,我有以下Angular文件,其中我尝试使用$http访问数据库,然后在$scope变量中使用此数据(显示在网页中)。问题是我不能得到$q.defer来运行,因为我认为它应该运行。$http函数中的console.log()记录包含从数据库返回的数据的对象。但是,当我调用函数时,它会记录Object{then:function}。数据包含在此对象中,但它不是对象的唯一部分。(好像是在Object中。$$v。我不确定这是什么意思。) 返回一个 会有用的 在Angular的早期版本中,$scope.P
Object{then:function}
。数据包含在此对象中,但它不是对象的唯一部分。(好像是在Object中。$$v。我不确定这是什么意思。)
返回一个
会有用的
在Angular的早期版本中,$scope.PortfolioItems=portfolioFactory.getResponse()代码>
本来也可以,但在新版本中,Angular不再自动打开承诺
承诺基本上是处理异步操作的另一种更好的方式(A)。
您可以将回调放入带有promise.then(callback)
的队列中,而不是以常规方式使用回调。然后,无论何时调用deferred.resolve方法,都会使用结果调用回调。如果在排队的回调之前已经解析了承诺,则会立即使用缓存数据调用它们。比执行query(callback)
常常变成的代码要好得多
仅供参考,您可以这样做,因为任何$http
调用的结果都已经是承诺:
app.factory('portfolioFactory', function ($http) {
var obj = {};
obj.getResponse = function(){
return $http.get('./../includes/portfolio/db_access.php').then(function(data){
console.log(data);
return data; //Return data further up the chain.
});
}
return obj;
});
您应该能够调用“then”函数来获取数据
app.controller("PortfolioCtrl", function($scope, portfolioFactory) {
$scope.PortfolioItems = portfolioFactory.getResponse();
$scope.PortfolioItems.then(function(results){
console.log(results);
};
});
它可能会详细说明,给这样的东西贴上标签
app.controller("PortfolioCtrl", function($scope, portfolioFactory) {
$scope.PortfolioItems = null;
var fetchPortfolioItems = portfolioFactory.getResponse();
fetchPortfolioItems.then(function(results){
$scope.PortfolioItems = results;
console.log($scope.PortfolioItems);
};
});
我仍然无法将
$scope.PortfolioItems
用作数据绑定变量。我对变量有一个ng repeat,尽管它没有加载任何内容。它在控制台中输出任何内容吗?
app.factory('portfolioFactory', function ($http) {
var obj = {};
obj.getResponse = function(){
return $http.get('./../includes/portfolio/db_access.php').then(function(data){
console.log(data);
return data; //Return data further up the chain.
});
}
return obj;
});
app.controller("PortfolioCtrl", function($scope, portfolioFactory) {
$scope.PortfolioItems = portfolioFactory.getResponse();
$scope.PortfolioItems.then(function(results){
console.log(results);
};
});
app.controller("PortfolioCtrl", function($scope, portfolioFactory) {
$scope.PortfolioItems = null;
var fetchPortfolioItems = portfolioFactory.getResponse();
fetchPortfolioItems.then(function(results){
$scope.PortfolioItems = results;
console.log($scope.PortfolioItems);
};
});