node.js 带有 if / else 语句的 readline - 如果输入为空则卡住
node.js readline with if / else statements - gets stuck if empty input
我想在终端中输出问题并接收答案作为输入。对于每个问题,都有一个检查,在这种情况下,是否提供了输入。如果是,则输出下一个问题;如果不是,问题应该循环。
如果每次都提供输入,resolve()
会被调用并转到下一个问题,这是应该的。但是,如果第一次发送空输入,就会出现问题。它有点卡住了,resolve()
不再工作了
const rdline = readline.createInterface({
input: process.stdin,
output: process.stdout
});
let userName, userSurname = "";
第一个问题
const question_name = () => {
return new Promise((resolve) => {
rdline.question("What's your name?\n", name => {
if (name) {
userName = name;
resolve();
} else {
question_name();
}
});
});
};
第二题
const question_surname = () => {
return new Promise((resolve) => {
rdline.question("What's your surname?\n", surname => {
if (surname) {
userSurname = surname;
resolve();
} else {
question_surname();
}
});
});
};
两个问题都叫
const askUser = async () => {
await question_name();
await question_surname();
console.log(`Hi, ${userName} ${userSurname}`);
rdline.close();
};
askUser();
js中有一个函数叫做resolve。我建议你这样做
function questionname()
{...}
而不是调用箭头函数。
另外,使用另一个名称而不是解析。
您似乎没有解析数据,并期望 userName
和 userSurname
存在于 askUser
。
而是解决答案和重复问题,并将它们分配到 askUser
:
// mock rdline
const rdline = {
question: (a,b) => a.match(/surname/) ? b('Test') : b('User'),
close: () => {}
};
const question_name = () => {
return new Promise((resolve) => {
rdline.question("What's your name?\n", name => {
if (name) {
resolve(name);
} else {
resolve(question_name());
}
});
});
};
const question_surname = () => {
return new Promise((resolve) => {
rdline.question("What's your surname?\n", surname => {
if (surname) {
resolve(surname);
} else {
resolve(question_surname());
}
});
});
};
const askUser = async () => {
const userSurname = await question_name();
const userName = await question_surname();
console.log(`Hi, ${userName} ${userSurname}`);
rdline.close();
};
askUser();
我想在终端中输出问题并接收答案作为输入。对于每个问题,都有一个检查,在这种情况下,是否提供了输入。如果是,则输出下一个问题;如果不是,问题应该循环。
如果每次都提供输入,resolve()
会被调用并转到下一个问题,这是应该的。但是,如果第一次发送空输入,就会出现问题。它有点卡住了,resolve()
不再工作了
const rdline = readline.createInterface({
input: process.stdin,
output: process.stdout
});
let userName, userSurname = "";
第一个问题
const question_name = () => {
return new Promise((resolve) => {
rdline.question("What's your name?\n", name => {
if (name) {
userName = name;
resolve();
} else {
question_name();
}
});
});
};
第二题
const question_surname = () => {
return new Promise((resolve) => {
rdline.question("What's your surname?\n", surname => {
if (surname) {
userSurname = surname;
resolve();
} else {
question_surname();
}
});
});
};
两个问题都叫
const askUser = async () => {
await question_name();
await question_surname();
console.log(`Hi, ${userName} ${userSurname}`);
rdline.close();
};
askUser();
js中有一个函数叫做resolve。我建议你这样做
function questionname()
{...}
而不是调用箭头函数。
另外,使用另一个名称而不是解析。
您似乎没有解析数据,并期望 userName
和 userSurname
存在于 askUser
。
而是解决答案和重复问题,并将它们分配到 askUser
:
// mock rdline
const rdline = {
question: (a,b) => a.match(/surname/) ? b('Test') : b('User'),
close: () => {}
};
const question_name = () => {
return new Promise((resolve) => {
rdline.question("What's your name?\n", name => {
if (name) {
resolve(name);
} else {
resolve(question_name());
}
});
});
};
const question_surname = () => {
return new Promise((resolve) => {
rdline.question("What's your surname?\n", surname => {
if (surname) {
resolve(surname);
} else {
resolve(question_surname());
}
});
});
};
const askUser = async () => {
const userSurname = await question_name();
const userName = await question_surname();
console.log(`Hi, ${userName} ${userSurname}`);
rdline.close();
};
askUser();