Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.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 角度$q.defer()返回对象{then:function}_Javascript_Angularjs - Fatal编程技术网

Javascript 角度$q.defer()返回对象{then:function}

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

我有以下Angular文件,其中我尝试使用$http访问数据库,然后在$scope变量中使用此数据(显示在网页中)。问题是我不能得到$q.defer来运行,因为我认为它应该运行。$http函数中的console.log()记录包含从数据库返回的数据的对象。但是,当我调用函数时,它会记录
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);
    };
});