Моя функция обратного вызова не вызывается.
Я сделал два модуля:
input.js
- он использует readline
для получения некоторых сообщений от пользователя на консоли.он имеет функцию getMessages()
, которая принимает пользовательский ввод и сохраняет сообщения в массиве. main.js
- здесь я вызываю getMessages()
и имею функцию обратного вызова, так что, когда функция завершается, выполняется,Я могу напечатать массив.
Кажется, нет ничего плохого в модуле ввода, поскольку я получаю массив в конце getMessages()
.Мой обратный звонок, однако, не вызывается.Я проверил это, вставив console.log
и проверив вывод на разных этапах.После выполнения getMessages()
программа останавливается.Я могу что-то упустить, так как я совершенно новичок в Node.Цени любую помощь.
// input.js
var messages = [];
function getMessages() {
const readline = require("readline");
rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.setPrompt("enter a message, press 0 when done : ");
rl.prompt();
rl.on("line", function(msg) {
if (msg == 0) {
rl.close();
} else {
messages.push(msg);
rl.prompt();
}
});
rl.on("close", function() {
console.log("returning array : ", messages);
return messages;
});
}
module.exports.getMessages = getMessages;
// main.js
const input = require("./input");
input.getMessages(function(err, messages) {
console.log("Your messages are : ", messages, messages.length);
});
PS D:\files\workspaces\tameOfThrones\node> node .\main.js
enter a message, press 0 when done : abc
enter a message, press 0 when done : def
enter a message, press 0 when done : ghi
enter a message, press 0 when done : jkl
enter a message, press 0 when done : mno
enter a message, press 0 when done : 0
returning array : [ 'abc', 'def', 'ghi', 'jkl', 'mno' ]
PS D:\files\workspaces\tameOfThrones\node>