javascript – Wait for user input from readline module (Node.Js)
whenever you call arki.question
it registeres the event listeners .on(“line”) and .on(“close”) then returns from the function. Whatever you returning from .on(“close”) event listener question
function does not know about it, because it is no longer on the call stack. you can either use a callback or promises with async...await
to get your result.
with callbacks
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
exports.question = function(q , cb ){
var response;
rl.setPrompt(q);
rl.prompt();
rl.on('line', (userInput) => {
response = userInput;
rl.close();
});
rl.on('close', () => {
return cb(response);
});
};
you call it like this
var age = arki.question("how old are you? ", resp => {
console.log(resp);
});
with promises
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
exports.question = function(q){
var response;
rl.setPrompt(q);
rl.prompt();
return new Promise(( resolve , reject) => {
rl.on('line', (userInput) => {
response = userInput;
rl.close();
});
rl.on('close', () => {
resolve(response);
});
});
};
you call it like this
arki.question("how old are you? ").then( response => console.log(response) );
or
; ( async () => {
console.log(await arki.question("how old are you? "));
})();
Read more here: Source link