Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

97
Vistas
how to call another page function name in inquirer node js

I am making a CLI using inquirer in nodejs.

So in Every choice list I have to give Exit choice so if user want to exit he/she can easily Exit.

So I have to write Exit again and again to avoid that problem I made a Exit.js file and move Exit code there so I can use code again and again.

Exit.js

const executeQuery = require("../executeQuery");

function WantToExit() {
  inquirer
    .prompt([
      {
        name: "moreQuery",
        type: "confirm",
        message: "Want to do anything else?",
      },
    ])
    .then((answer) => {
      if (answer.moreQuery) return executeQuery();
    });
}

module.exports = WantToExit;

and My executeQuery Code look like this

ExecuteQuery.js

const wantToExit = require("../Exit");
const Science = require("../Science");

function executetQuery() {
  inquirer
    .prompt([
      {
        type: "list",
        name: "cmsType",
        message: " Select Subject Options ",
        default: false,
        choices: ["Science", "Maths", "English", "Exit"],
      },
    ])
    .then((answers) => {
      if (answers.cmsType === "Science") {
        Science();
      } else if (answers.cmsType === "Exit") {
        wantToExit();
      }
    });
}

module.exports = executetQuery;

when I select Exit from executeQuery option and press Y option I am getting this error from Exit.js file

if (answer.moreQuery) return executeQuery();
                                   ^
TypeError: executeQuery is not a function
at /home/admin/SchoolProject/src/Exit/index.js:13:36
about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Your approach has issues because it has produced a cyclic dependency of modules. You have "required" wantToExit in ExecuteQuery.js and also "required" executetQuery() in Exit.js

What I believe you want to achieve is to keep asking user his preferred subject and then do something based on his/her choice until a user selects Exit.

I would suggest to use a while loop in ExecuteQuery.js for the main prompt and use a boolean flag to check if user wants to exit.

const wantToExit = require("../Exit");
const Science = require("../Science");

function executetQuery() {

let toStop = false;

// use a while loop
while(!toStop) {
inquirer
    .prompt([
      {
        type: "list",
        name: "cmsType",
        message: " Select Subject Options ",
        default: false,
        choices: ["Science", "Maths", "English", "Exit"],
      },
    ])
    .then(async (answers) => {
      if (answers.cmsType === "Science") {
        // you can also set toStop = true here if you want to 
        // stop after first iteration
        Science();

      } else if (answers.cmsType === "Exit") {
        // wantToExit() now returns a boolean flag
        toStop = await wantToExit();
      }
    });
}
  
}

module.exports = executetQuery;

and your Exit.js should be like


function WantToExit() {
  inquirer
    .prompt([
      {
        name: "moreQuery",
        type: "confirm",
        message: "Want to do anything else?",
      },
    ])
    .then((answer) => {
      return !answer.moreQuery;
    });
}

module.exports = WantToExit;
about 4 years ago · Juan Pablo Isaza Denunciar

0

This is a scenario of circular dependency. A requires B, B requires A and so on. To get it working, you'll have to modify the module.exports.

In Exit.js file, change module.exports=WantToExit to module.exports.WantToExit = WantToExit and require it as const {WantToExit} =require('./Exit.js') in ExecuteQuery.js file.

Similiary, module.exports.ExecuteQuery=ExecuteQuery and require as const {ExecuteQuery} =require('./ExecuteQuery.js')

about 4 years ago · Juan Pablo Isaza Denunciar

0

My guidance would be to learn RXJS and observables into this somehow.

Also i think (yield* ) might work in strict mode not sure, i wanted to not it because this is more a suggestion to play with and look into

Generator Functions* Exploring ES6 © 2015 - 2018 Axel Rauschmayer (cover by Fran Caye)

RXJS Guide Observable

const { Observable } = require("rxjs");

async function* wantToExit() {
    (yield* await inquirer
      .prompt([
        {
          name: "moreQuery",
          type: "confirm",
          message: "Want to do anything else?",
        },
      ])
      .then(answer => answer.moreQuery)
    );
  }

const executeQuery = new Observable(subscriber => {

    inquirer.prompt([
      {
        type: "list",
        name: "cmsType",
        message: " Select Subject Options ",
        default: false,
        choices: ["Science", "Maths", "English", "Exit"],
      },
    ]).then((answers) => {
      if (answers.cmsType === "Science") {
        subscriber.next(answers.cmsType); 
      } else if (answers.cmsType === "Exit") {
        let doWeExit = await wantToExit().next();
        if (doWeExit === ADD_SOMETHING_NO) {
            executeQuery.subscribe(userResponse => userResponse);
        } else {
            console.log('Adios!');
            return false;
        }
      }
    });
    
});

module.exports = { executeQuery };

On a new page you could than do. Or you could just use it right under the function declaration. Hope this vaguely helps to the next step.

const {executeQuery} = require('{INCLUDE YOUR FILEPATH}');

executeQuery.subscribe(userResponse => {
if(userResponse === 'Science') science();

    console.log(userResponse);
});

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda