Javascript 如何将函数返回到作用域变量中?

Javascript 如何将函数返回到作用域变量中?,javascript,angularjs,Javascript,Angularjs,我试图使用一个工厂,我可以分配给一个范围的角度变量。但是,每当我尝试附加此变量并使用console.log返回此变量时,都会将函数作为文本而不是值返回。有没有办法把这个修好 =============JS========== annApp.factory('rssFeed', function() { return function() { var events = []; $.get('xmlfile', function(xml)

我试图使用一个工厂,我可以分配给一个范围的角度变量。但是,每当我尝试附加此变量并使用console.log返回此变量时,都会将函数作为文本而不是值返回。有没有办法把这个修好

=============JS==========

 annApp.factory('rssFeed', function()
  {
    return function()
    {
      var events = [];
       $.get('xmlfile',
       function(xml)
    {
    var json = $.xml2json(xml); 
    jsonb = JSON.stringify(json, undefined, 3 );
   // var events = []; 
      var description = json['#document']['rss']['channel']['item']['description'];
      var title = json['#document']['rss']['channel']['item']['title'];
      var date = json['#document']['rss']['channel']['item']['pubDate'];
      events.push({'title': title, 'description':description, 'date': date});   
      return events;
   });
   return events; 
 }

annApp.controller('calendar', ['$scope', 'rssFeed', function($scope, rssFeed){
  $scope.events = rssFeed;
  console.log($scope.events);
}]);

如果您试图打印出对函数本身的引用,那么您得到的是正确的(DenimChicken提到的语法错误除外):


但是,由于
$.get
是异步的,您应该传入回调并在请求完成时调用它,或者使用承诺。

您只是想调用rssFeed工厂并将其记录到控制台吗?在这种情况下,您需要调用函数
console.log($scope.events())同样,我相信
返回事件后的行应为
};})这里有一个正确返回函数的小提琴:我可以使用这里找到的另一个stackoverflow问题使回调函数正常工作。创建回调后,我无法在页面上显示对象数据,但是,我可以将对象返回到控制台窗口。想法?不能不看你的代码就说。如果您将它放在JSFIDLE中,发布链接,我来看看。您使用的是jQuery
$.get
ajax方法,它不会通知Angular需要更新其绑定。如果您将其更改为使用Angular的
$http
提供程序,它将正常工作。()此外,您使用的URL似乎有错误。
annApp.factory('rssFeed', function(){
    return function(){
        var events = [];
        $.get('xmlfile', function(xml){
            var json = $.xml2json(xml); 
            jsonb = JSON.stringify(json, undefined, 3 );
            var description = json['#document']['rss']['channel']['item']['description'];
            var title = json['#document']['rss']['channel']['item']['title'];
            var date = json['#document']['rss']['channel']['item']['pubDate'];
            events.push({'title': title, 'description':description, 'date': date});   
        });
        return events; 
    };
}); // <-- added this
console.log($scope.events());