Javascript 同步数据库请求节点JS ORM
我需要用DB中的值填充数组,然后才返回它,所以如何使它同步Javascript 同步数据库请求节点JS ORM,javascript,node.js,postgresql,node-orm2,Javascript,Node.js,Postgresql,Node Orm2,我需要用DB中的值填充数组,然后才返回它,所以如何使它同步 var convs = Array; User.find({token: token}).first(function(err, user) { ConversationData.find({user_id: 1}).each().forEach(function(convData) { ConversationData.count({conversation_id: convD
var convs = Array;
User.find({token: token}).first(function(err, user) {
ConversationData.find({user_id: 1}).each().forEach(function(convData) {
ConversationData.count({conversation_id: convData.conversation_id}, function(err, count) {
if(count == 2) {
var user2;
console.log(convData.user_id);
ConversationData.find({user_id: 2, conversation_id: convData.conversation_id}).first(function(err, usr) {
user2 = usr;
});
Message.find({conversation: convData.conversation_id}, [ "createdAt", "Z" ]).first(function(err, msg){
convs[convData.id].conversation = convData.id;
convs[convData.id].lastMessage = msg.content;
convs[convData.id].lastMessageDate = msg.createdAt;
convs[convData.id].title = user2.name + " " + user2.name;
convs[convData.id].avatar = user2.avatar;
});
} else {
console.log('COUNT = ' + count);
}
});
});
console.log(convs);
你想做什么的背景是什么?不能使异步操作同步。相反,您必须调用另一个函数来告诉您的程序异步操作已经完成 例如,如果您正在响应客户端请求,则在获得完整结果后,可以从回调中发送响应,例如
response.send(result)
否则,您可以调用done()
函数或类似函数来传递结果
为了在代码中表示最终的结果,并使自己从嵌套回调中解脱出来,请研究用承诺替换回调函数。e、 g
return User.find({token: token}).then(function(userData){
return Conversation.find({id: userData.id});
}).then(function(conversationData){
return Message.find({conv_id: conversationData.id}); //or response.send(conversationData) etc
})
node.js不是这样工作的。如果您想要看起来同步的东西,请使用生成器、编译为异步javascript的语言或类似的东西。node的一大卖点是i/o是异步的。