2016-05-18 2 views
0

Я пытаюсь вернуть коллекцию mongodb с моего сервера клиенту, но получаю Не могу прочитать свойство then undefined на серверном контроллере. Я понимаю, что что-то не так с обещанием, но, похоже, не может его решить. Какие изменения кода необходимы, чтобы исправить это? Дайте мне знать, нужны ли дополнительные фрагменты кода.angularjs не может прочитать свойство then of undefined

Ошибка возникает при ".then (....)" в следующей функции.

course.controller.js

function getAll(req,res){ 
    CourseService.getAll() 
     .then(function(result){ 
      if(result){ 
       res.send(result); 
      }else{ 
       res.sendStatus(404); 
      } 
     }) 
     .catch(function(err){ 
      res.status(400).send(err); 
     }); 
} 

CourseService вызывает эту функцию:

course.service.js

function getAll(){ 
    console.log('services/course.service getALL'); 
    var deferred = Q.defer(); 

    db.collection('courses').find().toArray(function(err, result) { 
     if (err) deferred.reject(err); 
     console.log(result); 
     deferred.resolve(); 
     return deferred.promise; 
    }); 
} 

ответ

2

Вы должны переместить оператор возврата снаружи:

function getAll(){ 
    console.log('services/course.service getALL'); 
    var deferred = Q.defer(); 

    db.collection('courses').find().toArray(function(err, result) { 
     if (err) deferred.reject(err); 
     console.log(result); 
     deferred.resolve(); 
    }); 

    return deferred.promise; 
} 
2

Как вы пытаетесь применить .then функцию над обещание, но обещающий объект не возвращается с getAll функция. Верните deferred.promise объект из функции getAll вернет обещание.

Код

function getAll(){ 
    console.log('services/course.service getALL'); 
    var deferred = Q.defer(); //assuming `Q` is `$q` dependency instance 

    db.collection('courses').find().toArray(function(err, result) { 
     if (err) deferred.reject(err); 
     console.log(result); 
     deferred.resolve(); 
    }); 
    return deferred.promise; //return promise from here 
} 

Вы уже вернулись обещание, но это не есть в правильном месте, возьмите его из .collection функции.

Смежные вопросы