angularjs无法读取未定义的属性

时间:2016-05-18 07:58:26

标签: javascript angularjs mongodb promise deferred

我试图将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;
    });   
}

2 个答案:

答案 0 :(得分:2)

当您尝试将.then函数应用于promise时,但未从getAll函数返回promise对象。从deferred.promise函数返回getAll对象将返回promise。

<强>代码

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功能中取出。

答案 1 :(得分: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;
}