同步数据库请求节点JS ORM
Synchronous DB requests Node JS ORM
我需要用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: 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()
函数或类似的函数来传递结果。
为了在代码中表示最终结果,并将自己从嵌套回调中解放出来,请考虑用Promises替换回调函数。例如
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
})
相关文章:
- 可以't让我的if语句处理js中的html表单输入
- 使用agility.js进行页面布局和合成
- 使用Clipboard.js复制span文本
- 使用JS如何动态更改显示的html文件中的文本背景颜色
- 强制模板刷新ember.js
- 如何编写HTML输入的JS内联
- Angular JS IE9 Hashbang url rewriting
- 使用JS将数组转换为json对象
- Node.js v6.2.0类扩展不是函数错误
- 当js函数's已执行
- 要求未定义JS回调参数
- 在自定义mean.io包中使用angular-chart.js作为依赖项
- Waterline ORM(sails.js)“;其中或“;在查询中
- 查询中包含NOT Equal的水线ORM(sails.js)条件
- 同步数据库请求节点JS ORM
- 哪个ORM用于节点.js
- 使用 sequelize ORM 连接到节点上的 Amazon RDS Postgres 数据库.js出现问题
- 如何在Sequelize ORM npm-node.js中实现缓存机制
- Sails.js+Mongodb使用ORM插入嵌套的json记录
- 将Ruby On Rails翻译成Node.js中的Sequelize(或其他orm)