Моя функция обратного вызова не вызывается - PullRequest
0 голосов
/ 23 декабря 2018

Моя функция обратного вызова не вызывается.
Я сделал два модуля:

  1. input.js - он использует readline для получения некоторых сообщений от пользователя на консоли.он имеет функцию getMessages(), которая принимает пользовательский ввод и сохраняет сообщения в массиве.
  2. 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>

1 Ответ

0 голосов
/ 23 декабря 2018

Ваша функция getMessages, не имеет параметра в качестве обратного вызова.

Значение,

function getMessages(){}

Пока:

input.getMessages(function(err, messages){

console.log("Your messages are : ", messages, messages.length);

});

Вам необходимо:

 function getMessages(callback){
    //call callback according to your logic

 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...