我的回调函数没有被调用

时间:2018-12-23 11:27:36

标签: node.js callback

我的回调函数没有被调用。
我制作了两个模块:

  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 :(得分:1)

您的函数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

 }