javascript - 如何从数据库中异步获取数据?
问题描述
我在两个用户之间创建了一个聊天应用程序。加载客户端时,会为 user1 分配一个值,而 user2 在启动时未定义。当用户单击屏幕截图左侧的用户列表按钮时,将分配 user2。所以现在我有 user1 和 user2 所以现在我想获取 user1 和 user2 之间的所有数据,但我得到一个空数组。conversation.find({ $and : [ { user1: user1 }, { user2: user2 } ] })
click 后设置 user2 时如何调用?
注意:conversation.find({})
工作正常但conversation.find({ $and : [ { user1: user1 }, { user2: user2 } ] })
不工作。
下面的代码不起作用:
let conversation = db.collection('conversation');
let user1,user2;
socket.on('GET_USER', function (data) {
console.log(data);
user2 = data.user2;
});
socket.on('LOGGEDIN_USER', function(data) {
console.log(data);
user1 = data.user1;
console.log("This is user1 "+ user1)
console.log("This is user2 "+ user2)
conversation.find({ $and : [ { user1: user1 }, { user2: user2 } ] }).toArray(function (err, res) {
if(err){
throw err;
}
console.log(res)
// Emit the messages
io.emit('RECEIVE_MESSAGE', res);
})
});
截屏:
聊天截图:
解决方案
您可以使用Promise
s
let conversation = db.collection("conversation");
const waitForUser2 = new Promise((resolve, reject) => {
socket.on("GET_USER", function (data) {
resolve(data.user2);
});
});
const waitForUser1 = new Promise((resolve, reject) => {
socket.on("LOGGEDIN_USER", function (data) {
resolve(data.user1);
});
});
Promise.all([
waitForUser1,
waitForUser2
]).then(([user1, user2]) => {
console.log("This is user1 " + user1);
console.log("This is user2 " + user2);
conversation.find({
$and: [
{user1: user1},
{user2: user2}
]
}).toArray(function (err, res) {
if (err) {
throw err;
}
console.log(res);
// Emit the messages
io.emit("RECEIVE_MESSAGE", res);
});
});
推荐阅读
- typescript - 如何使用 Typescript AST 使用初始化程序创建导出的常量?
- javascript - 在移动设备上将班级转移到另一个班级
- android - React-native run-android --variant=release 错误(RN 57.5)
- python - 如何在结果中跳过 ORM 开销?
- node.js - DiscordJS 和 Linux 的屏幕
- mysql - Laravel 一对多(多态)关系
- r - 获取最大 col 值并使其成为新变量
- google-apps-script - Google Apps 脚本中的 Google Docs API 作为外部 API(不作为扩展服务)
- java - Firebase 数据库不向 ListView 显示数据但写入 Firebase
- ffmpeg - 第一个TS文件最大:ffmpeg mp4 to hls