在angularfire中异步创建一个数组

Asynchronously create an array in angularfire

我是 angularfire 的新手,但我正在尝试创建一个数组,该数组是来自 firebase 数组的名称列表。当我查看列表 returns 时,它似乎是我想要的,所以我知道该功能正常工作。

angular.module('myApp')
  .factory('QuestionType', function ($firebaseArray, $firebaseObject, Ref) {
    var types = $firebaseArray(Ref.child('questionTypes'));

    var questionType = {
      list: function(){
        var lists =[];
        types.$loaded().then(function(){
          for(var i=0; i<types.length; i++){
            lists.push(types[i].name);
          }
          return lists;
        });

      }
    };  
    return questionType;
  });

在我的控制器中,我调用了那个工厂,但是因为它是异步的,所以当我尝试在我的视图中使用数组时,它返回为未定义。

$scope.questionType = QuestionType.list();

我发现我需要在我的工厂中使用 $loaded.then,但是我如何在我的控制器中做类似的事情以便我可以在我的视图中正确使用它?

谢谢!

Return .then() 生成的新承诺。以前你的列表函数没有 return 任何东西。

angular.module('myApp')
  .factory('QuestionType', function ($firebaseArray, $firebaseObject, Ref) {
    var types = $firebaseArray(Ref.child('questionTypes'));

    var questionType = {
      list: function(){

        return types.$loaded().then(function(){
          var lists =[];
          for(var i=0; i<types.length; i++){
            lists.push(types[i].name);
          }
          return lists;
        });

      }
    };  
    return questionType;
    });

--

QuestionType.list().then(function(list){
  $scope.questionType = list;
});