angularjs не может прочитать свойство тогда неопределенного [дубликата]

0

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

Ошибка возникает при ".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;
    });   
}
Теги:
promise
deferred

2 ответа

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

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

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 его из функции .collection.

Ещё вопросы

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