Node.js,Async和Socket.on / .once事件

时间:2017-11-21 02:48:51

标签: node.js

所以我目前遇到的问题是,我的小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语句,但这两个函数最终仍然运行。

我似乎无法绕过我所看到的任何其他解决方案。

2 个答案:

答案 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']
});`