всякий раз, когда вы вызываете arki.question
, он регистрирует прослушиватели событий .on ("line") и .on ("close"), а затем возвращается из функции.Что бы вы ни возвращали из прослушивателя событий .on ("close"), функция question
не знает об этом, потому что ее больше нет в стеке вызовов.Вы можете использовать обратный вызов или обещания с async...await
для получения результата.
с обратными вызовами
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);
});
};
Вы называете это так
var age = arki.question("how old are you? ", resp => {
console.log(resp);
});
с обещаниями
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);
});
});
};
Вы называете это так
arki.question("how old are you? ").then( response => console.log(response) );
или
; ( async () => {
console.log(await arki.question("how old are you? "));
})();