非阻塞输入提示?的node.js

时间:2016-05-21 16:31:52

标签: javascript node.js socket.io

我正在使用socket.io/node.js在聊天应用程序上工作,在终端中,我可以与另一个会话聊天,但是当我发送消息以便阅读消息时我要么点击了输入提示,或输入消息,而不是最好的。 console.log()的任何替代方案?

收到新消息事件时,会触发包含缺刻和消息变量的console.log,以使其更实时吗? 我正在使用Prompt-Sync模块。

编辑:在邮件事件摘要中。

关于留言功能:

        socket.on('msg',function(data){ 

         var newmessage = data.m;
         var newmsgnick = data.nick;
         newmessagefunc(newmessage,newmsgnick)

        });

newmessagefunc函数:

        function newmessagefunc(message,nick){
         console.log(nick+": "+message);
         message = i("message: ")
            }

消息日志:

 message: Hello - how goes?
 Ozzie: Hello - how goes?
 message: Hello - ?
 Ozzie: it goes well. 
 message: 

要阅读其他用户发送的消息,我必须提交消息,或者只是在消息提示中输入,它们不会显示,因为socket.io据说可以执行,任何这方面的方法?

2 个答案:

答案 0 :(得分:0)

当有传入消息时,您正在阅读消息。这会强制您在显示传入消息之前键入消息。

socket.on('msg',function(data){ 
  var newmessage = data.nm;
  var newmsgnick = data.nn;
  console.log(newmessage);
});

现在,这将打印传入的消息。将提示代码保留在此块之外。

while(typeof message === "undefined"){
  message = i("message: ") 
}
socket.emit('msg', {'nm':message, 'nn':'nick'});

答案 1 :(得分:0)

native prompt dialog正在阻止。这意味着即使接收到新事件,脚本的其余部分也会在解除阻塞之前运行。

大多数人会使用文本框来获取用户输入,并使用按钮点击或类似事件来获取输入并发布消息。这样,socket msg事件可以在不被阻止的情况下触发

HTML

<input id="message"><button id="sendmsgbtn">Send</button>

JS

var msgInput = document.getElementById("message");
var btn = document.getElementById("sendmsgbtn");

btn.addEventListener("click,sendMessage);
msgInput.addEventListener("keyup",function(e){
    //this is used to detect if there was a enter 
    //key press inside the input
    if(e.keyCode==13){
        sendMessage();
    }
});

socket.on('msg',onMsg);    

function onMsg(data){
    var newmessage = data.nm;
    var newmsgnick = data.nn;
    console.log(newmessage);
    //add message to chat window
}

function sendMsg(){
    var msg = msgInput.value;
    msgInput.value = "";
    socket.emit("msg",{msg:msg});
}