所以我目前遇到的问题是,我的小node.js项目中有事件。
Socket.once('data', function (data) {
//a login function that handles user names
});
第二个事件
Socket.on('data', function (data) {
//function that lets user chat
});
我的问题是当我运行它并且客户端连接时,会发生这种情况。
"Please Login"
*Client inputs login*
Your name is "Billtest"
Billtest says "Billtest"
Billtest says "Hi, that wasn't suppose to happen"
基本上,这两个函数最终都会运行并获得相同的输入。
我希望我的Socket.once事件先运行,而我的Socket.on事件只能在socket.once事件结束后运行。
我试着自己解决这个问题,但我想没有明确的说法,我不明白其中任何一个。我已经查看过promises和async以及所有内容,但我似乎无法用我的函数来实现它。
甚至可能吗?如果是这样,有些人可以给我一个更精确的例子来说明如何实现异步函数,以便它们按顺序运行?而不是一下子?我已经浏览了MDN,并在过去几天用谷歌搜索了,但我发现的例子似乎并没有真正详细解释,如何设置它。
我尝试使用userName === undefined的if语句,但这两个函数最终仍然运行。
我似乎无法绕过我所看到的任何其他解决方案。
答案 0 :(得分:0)
您好,为什么不考虑简单的解决方案?使用不同的事件名称
// event 'user-join' handles first username thing
Socket.once('user-join', function (data) {
//a login function that handles user names
});
// event 'chat' handles chat message
Socket.on('chat', function (data) {
//function that lets user chat
});
发射时,执行socket.emit('user-join', data)
答案 1 :(得分:0)
Async是类似问题的不错选择。在您的情况下,async.waterfall或async.series函数应该完成这项工作。
`async.series([
function(callback) {
// your login function
callback(null, 'one');
},
function(callback) {
// your chat function
callback(null, 'two');
}
],
function(err, results) {
// results is now equal to ['one', 'two']
});`