私はMongoDB、Redis、NodeJS、socket.ioを使って複数の部屋でチャットアプリを作成しようとしています。私はroomDocumentState
と呼ばれるRedisリストを照会し、その値を変数に戻す必要があります。この変数はグローバルスコープになければならず、変更する必要があります。関数を使ってグローバル変数を更新するには
私が使用しようとしたコードは、関数のローカル変数のみを変更します。私は "閉鎖"と呼ばれるものを読んだ。誰かが私にそれを正しく実装する方法を教えてもらえますか?ここで
はRedisのからデータを引き出し、変数count_1
を修正するためのコードです:
function checkRoomDocumentState() {
var count_1 = 0;
store.llen(roomDocumentState, (err, res) => {
if (err) {
throw err;
}
else {
if (res > count_1) {
count_1 = res;
return count_1;
}
}
});
}
だから、この関数は次のように呼ばれて、ここにコードスニペットがあります:
io.sockets.on('connection', client => {
createWhiteboardRooms();
sub.subscribe(roomDocumentState);
store.lpush(roomDocumentState, event1);
//added this to check if there's any value at all
checkRoomDocumentState();
console.log(checkRoomDocumentState());
sub.on("message", (channel, message) => {
console.log(message);
client.send(message);
});
});
あなたは 'count_1'を使用したいどうすればよいですか? – alexmac
基本的に、私はredisリストの値が変更されたかどうかをチェックするこの機能を持っています。この値は 'llen'を使って得られ、count_1に入れられます。そして、2番目の関数はこの変数をチェックし、他のものを実行します。 – jerome
私は、この変数が_initialized_である方法については尋ねませんが、_used_とはどのようになるのでしょうか。 'checkRoomDocumentState'はどこで呼びますか? 'checkRoomDocumentState'が非同期関数であるため、呼び出しの直後にこの変数を使用する場合は、未定義になります。 – alexmac