Javascript 如何处理nodejs中的内部查询?
在nodeJS中创建了Rest Post类型API,其中: 我在这里执行两个查询。 1.首先对answers表执行查询,以获取该表中的用户Id和答案详细信息。//我在我的控制台上签了名,他们向我显示了两个用户Id 2.其次,根据我在find函数中传递的用户Id,对users表执行查询以获取用户详细信息。//检查我的控制台,它们向我显示两个应答对象,因为我有两个用户Id。 ------------------以上工艺效果良好--------------------- 现在,我被卡住了,因为,我有两个合并结果到一个对象中。 我正在做这件事,但不是完美的。帮帮我吧 我的代码:-Javascript 如何处理nodejs中的内部查询?,javascript,node.js,Javascript,Node.js,在nodeJS中创建了Rest Post类型API,其中: 我在这里执行两个查询。 1.首先对answers表执行查询,以获取该表中的用户Id和答案详细信息。//我在我的控制台上签了名,他们向我显示了两个用户Id 2.其次,根据我在find函数中传递的用户Id,对users表执行查询以获取用户详细信息。//检查我的控制台,它们向我显示两个应答对象,因为我有两个用户Id。 ------------------以上工艺效果良好--------------------- 现在,我被卡住了,因为,我有两
app.post('/getTopAns', function(req, res) {
console.log("inside getTopAns ");
var questionId=req.body.questionId;
mongoose.model('answers').find({
questionId:questionId,
compliance:"Y"
}, function(err, ansResult){
for (var i = 0;i<ansResult.length;i++) {
mongoose.model('users').findOne({
userId:ansResult[i].userId,
}, function(err,usrResult){
var obj = {
followerLength : usrResult.follower.length,
upvote : ansResult[i].upvote
}
})
console.log(obj);
}
});
})
app.post('/getTopAns',函数(req,res){
log(“内部getTopAns”);
var questionId=req.body.questionId;
mongoose.model('answers')。查找({
问号:问号,
合规性:“Y”
},函数(err,ansResult){
对于(var i=0;i也许您应该首先记录ansResult以查看db是否返回此值。如果返回,则检查usrResult。如果两者都返回,我通常使用lodash的assign或merge将两个对象合并为一个对象我建议使用Promissions而不是callback来处理node.js的异步。流程是获取第一个调用结果,映射将结果数组放入承诺列表中,我们可以使用Promise.all
等待结果。最后映射第一个列表中的第二个结果
app.post("/getTopAns", function(req, res) {
console.log("inside getTopAns ");
var questionId = req.body.questionId;
mongoose.model("answers")
.find({
questionId: questionId,
compliance: "Y"
})
.then(ansResult => {
const promises = ansResult.map(ans => {
return mongoose.model("users")
.findOne({ userId: ansResult[i].userId })
})
return Promise.all(promises)
.then(usrResults => {
return usrResults.map((usrResult, i) => {
followerLength: usrResult.follower.length,
upvote: ansResult[i].upvote
})
})
})
.then(results => {
console.log('got all results here', results)
})
});
使用async/await
会更好
app.post("/getTopAns", async (req, res) => {
console.log("inside getTopAns ");
var questionId = req.body.questionId;
const ansResult = mongoose.model("answers")
.find({
questionId: questionId,
compliance: "Y"
})
const promises = ansResult.map(ans => {
return mongoose.model("users")
.findOne({ userId: ansResult[i].userId })
})
const usrResults = await Promise.all(promises)
const results = usrResults.map((usrResult, i) => {
followerLength: usrResult.follower.length,
upvote: ansResult[i].upvote
})
console.log('got all results here', results)
});
更多信息可以在这里找到:预期的输出是什么?它看起来怎么样?