2015-12-09 3 views
0

Я написал угловую службу, querys БД и должен возвратить Категории:Возвращение значения в AngularJS

(function() { 
    'use strict'; 
    angular.module('budget') 
      .service('CategoriesService', ['$q', CategoriesService]); 

    function CategoriesService($q) { 
     var self = this; 
      self.loadCategories = loadCategories; 
      self.saveCategorie = saveCategorie; 
      self.datastore = require('nedb'); 
      self.db = new self.datastore({ filename: 'datastore/default.db', autoload : true}); 

     function saveCategorie (categorie_name) { 
      var entry = {name: categorie_name, 
        type: 'categorie'} 
      self.db.insert(entry); 
     }; 

     function loadCategories() { 
      self.db.find({type: 'categorie'}, function (err, docs) { 
       var categories = docs; 
       return categories; 
      }); 
     }; 

     return { 
      loadCategories: self.loadCategories, 
      saveCategorie: self.saveCategorie 
     }; 
    } 
})(); 

Когда я console.log внутри function loadCategories() он возвращает мне массив из 6 объектов (объекты база данных), но вне функции она просто дает мне undefined.

Я звоню через контроллер с CategoriesService.loadCategories()

Так что я думаю, что я мог бы сделать что-то РВП называется promise но Iam не уверен в этом.

Как я могу получить фактические данные из этой службы?

+2

Вы правы, нуждающихся в обетование. Прочтите это: https://docs.angularjs.org/api/ng/service/$q –

ответ

1

Прежде всего, вам не нужно ничего возвращать из рецепта сервис фабрики, вам просто нужно назначить метод переменной this.

По крайней мере, вам нужно:

// service.js 
 

 
self.loadCategories = function() { 
 
    var deferred = $q.defer(); 
 
    db.find({type: 'categorie'}, function (err, docs) { 
 
    deferred.resolve(docs); 
 
    }); 
 
    
 
    return deferred.promise; 
 
}; 
 

 
// controller.js 
 

 
service 
 
    .loadCategories() 
 
    .then(function(categories) { 
 
    $scope.categories = categories; 
 
    }) 
 
;

+0

почему он хочет передать свое обещание $ q? –

+0

Потому что db.find кажется, что не возвращает объект обещания ... – Hitmands

1

вам нужно вернуть свое обещание первый так просто добавить еще одно возвращение, и вы хорошо идти ...

function loadCategories() { 
     // you need to return promise first and you can resolve your promise in your controller 
     return self.db.find({type: 'categorie'}, function (err, docs) { 
      var categories = docs; 
      return categories; 
     }); 
    }; 
Смежные вопросы