我正在使用MongoDB在Node上创建一个API,我学习缓慢。创建GET路由时,我遇到了问题,在通过实现的逻辑之前先发送了请求响应。在代码中,总是先执行res.send(listClass);
行,紧接着执行foreach。
exports.getClassrooms = (req, res) => {
const listClass = [];
const query = {"userId": req.params.id};
classUser.find(query, (err, result) => {
if(result){
result.forEach(data => {
classroom.findById({"_id": data.classId}, (err, doc) => {
if(doc){
listClass.push(doc);
}
});
});
}
res.send(listClass);
}).catch( err => {
res.status(500).send({
message: err.message || "Erro to find the class."
});
});
}
答案 0 :(得分:0)
var async = require('async');
exports.getClassrooms = (req, res) => {
const listClass = [];
const query = { "userId": req.params.id };
classUser.find(query, (err, result) => {
if (result) {
var i = 0;
async.whilst(function () {
return i <= result.length
},
function (next) {
classroom.findById({ "_id": data.classId }, (err, doc) => {
if (doc) {
listClass.push(doc);
}
});
i = i + 1;
next();
},
function (err) {
res.send(listClass);
}
)
}
}).catch(err => {
res.status(500).send({
message: err.message || "Erro to find the class."
});
});
}
classroom.findById
功能不是同步功能,此功能为asynchronous
功能。
因此,我们可以使用async库,
有针对此问题的服务器方法,我使用了whilst函数
此外,我们可以使用await / async代替async
库。