【发布时间】:2019-06-08 12:19:01
【问题描述】:
在我的节点脚本中,我正在等待用户在某个时候按下回车键:
console.log("Press enter to continue...");
await new Promise(function(resolve, reject) {
process.stdin.once("data", function(data) {
resolve();
});
});
脚本运行良好,只有在用户按下回车后才会继续运行。
但在执行结束时,进程并没有终止。
相反,它似乎只是等待用户输入(即,每次按 Enter 时都会打印一个换行符)。
我很确定问题与process.stdin.once 有关,而不是我如何使用Promise 来强制同步执行。
我的脚本中有几个地方我必须等待用户按 Enter,因此在解决承诺之前添加 process.stdin.end() 是不可能的(这意味着等待用户按 Enter 将起作用只有一次)。
我该如何解决这个问题?
【问题讨论】:
-
这不可能是你的全部代码,因为
await只能在async函数中使用。 -
@Pointy:当然这不是我的全部代码。我已经明确地说明了这一点(“我的脚本做这个和那个......”)。是的 - 这个 sn-p 确实是从
async函数调用的。 -
好吧,人们永远不知道这里隐藏着什么可能隐藏在未发布的代码中。也就是说,给定的答案是正确的,尽管在 UNIX/Linux C 代码中惯用,您可能只是明确地
exit()或退出main函数(我意识到 Node 程序中不存在该函数)。跨度> -
@Pointy:从技术上讲,因为我确实知道我的脚本在哪里开始和结束(查看所有异步调用),所以我只是在开头添加了
process.stdin.resume(),最后添加了process.stdin.pause()。其余的都保持不变。谢谢。
标签: javascript node.js process user-input stdin