我正在做一个基于Socket.io的应用程序,我正在努力让我的应用程序启动,并要求一个服务器IP作为输入变量连接,但我似乎不知道如何让它工作。下面是代码。
const chalk = require('chalk').constructor({ enabled: true, level: 3 });;
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.question(`Please type in Server CURL/IP\n\n `, (serverip) => {
id = serverip;
var socket = io(serverip);
});
var id = "";
var buffer = "";
function chat(){
rl.question(chalk.magenta("» "), (answer) => {
buffer = `${chalk.cyan(id)} : ${chalk.blue(answer)}`;
socket.emit("message", buffer);
chat();
});
}
socket.on('connect', () => {
rl.question(`What is your name?\n\n `, (answer) => {
socket.emit("message", `${chalk.green(answer)} has joined the chat`);
id = answer;
chat();
});
socket.on('msg', function(data){
if(buffer!=data){
console.log("\n" + data);
chat();
}
});
})
If anyone could help that'd be amazing
你在这里碰到了Javascript的异步性。readline.question()
立即返回。当你的用户完成回答问题时,它就会调用它的回调。var socket = io()
行,其中提到 server
,运行在 server
被定义。
你必须在回调中做更多的工作,从 readline.question()
而你的外在层次的工作就少了
编辑 我会试着给你指出正确的方向。不过,你真的需要读一读Javascript,了解回调对其控制流程的重要性。
这不是,重复一遍不是,调试。
rl.question(`Please type in Server CURL/IP\n\n `, (serverip) => {
/* only in the this callback function you have access to socket */
var socket = io(serverip);
/* use socket here to set up your operations. */
socket.on('connect', () => {
rl.question(`What is your name?\n\n `, (answer) => {
socket.emit("message", `${chalk.green(answer)} has joined the chat`);
id = answer;
chat(socket);
});
});
socket.on('msg', function(data){
if(buffer!=data){
console.log("\n" + data);
chat(socket);
}
});
});
/* you can use socket in a function defined at the top level
* if you pass it to that function as a parameter
*/
function chat(socket) {
rl.question(chalk.magenta("» "), (answer) => {
buffer = `${chalk.cyan(id)} : ${chalk.blue(answer)}`;
socket.emit("message", buffer);
chat(socket);
});
}
学习很多关于回调、承诺和Javascript的async await的知识是你未来的目标。