首页 > 解决方案 > 我的回调函数没有被调用

问题描述

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

  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>

标签: node.jscallback

解决方案


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

 }

推荐阅读