Доступ к возвращенным данным из контроллера

0

У меня есть данные на фабрике, которые я могу просмотреть в console.log из функции, как я могу получить ее в своем контроллере?

Он просто возвращается как неопределенный.

завод

.factory('ThemeColor', function() {
    var db = new PouchDB('myDB');
    var self = {
      getColor: function(){
        db.get('themeColor').then(function(data){
          console.log(data);
          return data;
        });
      },
    }

    return self;
});

контроллер

$scope.ThemeColor = function(){
  ThemeColor.getColor().then(function(data){
      console.log(data);
    });
  };
  • 0
    что возвращает console.log (data) внутри db.get ('themeColor'). then (функция (data)?
Теги:

3 ответа

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

PouchDB возвращает Promise. Угловой должен знать о Promise когда он решает. Таким образом, в вашем контроллере используйте команду add $q и заверните завод в $ q.when() следующим образом:

.factory('ThemeColor', function($q) {
var db = new PouchDB('myDB');
var self = {
  getColor: function(){
  return $q.when(db.get('themeColor')).then(function (data) {          
      return data;
    }).catch(function(err){
      console.error(err);
   });
  }
}

return self;
});

Вы можете проверить документы

  1. Угловая документация по $ q.when()

  2. Замечание PouchDB на угловом $ q.when(). Прочтите секционные Promises

  • 0
    Я ввел $ q и получаю неопределенный от console.log (данные)
  • 0
    Console.log (data) в моем контроллере работает до запуска ThemeColor.getColor, поэтому он возвращается не определенным, поэтому обещание не работает
Показать ещё 3 комментария
0

Вы не можете вернуть значение из. Then (function (data) {}), поскольку функция (данные) {} является обратным вызовом.

Вы можете использовать нижеследующее решение, которое удовлетворит ваши потребности:

Код контроллера:

.controller('myCntrl', function($scope, ThemeColor) {
    function successCallback(res) {
        console.log(res);
    }

    function failureCallback(res) {
        // @TODO
    }


    $scope.ThemeColor = function(){
        ThemeColor.getColor(successCallback, failureCallback);
    };
});

Код услуги:

.factory('ThemeColor', function() {
    var db = new PouchDB('myDB');
    var self = {
      getColor: function(successCallback, failureCallback){
        db.get('themeColor').then(function(data){
            successCallback(data);
        }, function(data) {
            failureCallback(data);
        });
      }
    }

    return self;
});
0

Так просто как:

$scope.ThemeColor = function(){
  $scope.color = null;
  ThemeColor.getColor().then(function(data){
    console.log(data);
    $scope.color = data; // i am color
  });
};
  • 0
    Я все еще получаю Не могу прочитать свойство 'then' из undefined

Ещё вопросы

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