javascript - 如何使socket.io异步方法同步?
问题描述
我在这里关注代码片段https://github.com/socketio/socket.io-redis#redisadapterclientsroomsarray-fnfunction
io.in('room3').clients((err, clients) => {
console.log(clients); // an array containing socket ids in 'room3'
});
让客户进入特定的房间。
有没有一种简单/惯用的方法可以使这个片段同步?我想遍历一组房间并同步获取clients.length
每个房间中的用户数(即在检索到当前房间的用户数之前不要遍历循环。)
解决方案
您可以在循环内使用Promises
和async await
for
async function getClients() {
for(let room in rooms) {
try{
const promise = new Promise((res, rej) => {
io.in(room).clients((err, clients) => {
if(err) {
rej(err);
} else {
res(clients); // an array containing socket ids in room
}
});
})
const clients = await promise;
console.log(clients);
}catch(err) {
console.log(err)
}
};
}
使用上述方式将帮助您遍历每个房间并逐个获取客户端。
虽然你不能强制它们同步运行