【问题标题】:Prevent node.js application from exiting once the process is done进程完成后阻止 node.js 应用程序退出
【发布时间】:2021-10-22 11:39:12
【问题描述】:

我编写了一个非常基本的 nodejs 应用程序,如下所示:

#!/usr/bin/env node

const inquirer = require("inquirer");
const chalk = require("chalk");
const figlet = require("figlet");
const shell = require("shelljs");
const fs = require('fs');

//Defining some functions
//~~

//The main part of the code
const run = async function() {
    const answers = await form();
    //other codes
    //~~
}

run();

代码的主要目的是使用inquirer模块在控制台中提出一些问题,然后在run()部分处理答案。它在这方面做得很好。它成功地提出了问题,并对答案做了它应该做的事情。

但是,处理完答案后,该过程将退出。我想要的是在处理完答案后,我希望它再次回答相同的问题,并不断重复,直到我手动终止该过程。

我试过了:

for( ; ; ) {
    run();
}

但是,它会一次又一次地回答问题,而无需等待答案。这是控制台的样子: console output

我希望它这样做:

  1. 提出问题并等到我输入答案。
  2. 处理问题(使用run() 中的代码)
  3. 完成后,返回问题 1。

我该怎么做?

【问题讨论】:

  • while (true) { await run(); }
  • 它会抛出一个错误,等待只在异步函数中有效。
  • @EukkMaru 自从 Node v14.8 以来没有 supports top-level await
  • @JeremyThile 我正在使用节点 v16.11.0,我有点过于简化了错误消息,但该消息类似于它应该在异步函数或模块的顶层主体中。跨度>
  • 您可以随时将我的线路放入异步函数并调用它。我的评论主要是为了表明你必须await run() 调用。

标签: javascript node.js console command-line-interface console-application


【解决方案1】:

而不是做

for( ; ; ) {
    run();
}

在 run 函数中执行此操作

while (true) {
    const answers = await form();
    //other codes
    //~~
}

【讨论】:

  • 完美运行,非常感谢!
  • 不客气!
  • 嘿,@ChrisG,我们没有做for 循环。我的评论说我们不需要做for。
  • 对,对不起,我错过了“代替”:)
猜你喜欢
  • 1970-01-01
  • 2012-03-12
  • 1970-01-01
  • 1970-01-01
  • 2014-01-26
  • 2011-04-30
  • 1970-01-01
  • 2018-12-07
  • 2023-04-01
相关资源
最近更新 更多