Firebase получает данные от угловой фабрики

0

Я должен установить завод, и я хочу, чтобы он возвращал данные, которые он получает от пожарной базы. Завод такой:

.factory('companyFactory', function($firebaseArray) {
var itemsRef = new Firebase("https://somename.firebaseio.com/");
var allNodes=$firebaseArray(itemsRef);

 var myObject={
  getNames: function() {
     itemsRef.once("value", function(snapshot) {
      var nameSnapshot = snapshot.child("companyName");
      var name = nameSnapshot.val();
      return name; //this does not return the data
    });
  }

 } 

return myObject;
});

В моем контроллере я делаю это:

 $scope.companies=companyFactory.getNames();//not working

Что я должен сделать, чтобы это работало. Я хочу получить данные один раз, а затем откорректировать их, используя фабрику для разных видов

Теги:
firebase

1 ответ

1
Лучший ответ

itemsRef.once для Firebase являются асинхронными, поэтому вам нужно использовать обещание для возврата names.

var myObject={
  getNames: function() {
     var defer = $q.defer();
     itemsRef.once("value", function(snapshot) {
      var nameSnapshot = snapshot.child("companyName");
      var name = nameSnapshot.val();
      defer.resolve(name); //this does not return the data
    });
    return defer.promise;
  }

И в вашем кодовом коде вам нужно использовать алгоритм обратного вызова для получения данных.

companyFactory.getNames().then(function(data) {
  $scope.companies=data;
});
  • 0
    будет возвращаться defer.promise внутри функции .once ()?
  • 0
    НЕТ! Должно быть возвращаемое значение функции getNames . Внутренний возврат не влияет на getNames напрямую.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню