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