我应该如何调用这个Node.js函数?



我正在遵循 Node.js教程,它给了我以下代码来启动:


process.stdout.write("I'm thinking of a number from 1 through 10. What do you think it is? n(Write "quit" to give up.)nnIs the number ... ");
let playGame = (userInput) => {
let input = userInput.toString().trim();
testNumber(input);
};

它要求我完成应用程序,所以我这样做了,它起作用了:

process.stdin.on('data', (userInput) => {
let input = userInput.toString()
playGame(input)
//console.log(input)
});

但是,当我单击"检查您的工作"按钮时,它说我做错了。正确的答案是这样的:

process.stdin.on('data', (userInput) => {
let input = userInput.toString()
//console.log(input)
});
process.stdin.on('data', playGame)

我对此有几个问题。1. 为什么需要在侦听器中调用 playGame 方法,而不是只是在抓取用户数据的同一方法中显式调用它?2. 为什么此示例不创建竞争条件?使用"数据"名称发出的事件不会同时触发吗?对不起,如果这些是基本问题,只是想了解我正在学习的内容。提前感谢您的任何见解。

您的教程中的确切说明是什么?

process.stdin是一个Stream,而又是一个EventEmitterdata事件回调将在发射器发出data事件时执行。以下是文档对emit()的描述:

同步调用为事件注册的每个侦听器 命名的事件名称,按注册顺序,传递 为每个人提供了参数。

因此,据我了解,这两种解决方案在功能上是等效的 - 更具体地说,将代码拆分为两个单独的回调将不允许事件循环在两者之间执行任何其他代码。请注意,您仍在使用解决方案进行冗余字符串转换。

此外,没有竞争条件,因为回调将按照注册顺序一个接一个地执行。在javascript执行模型中实际上只有一个执行线程 - 所以基本上只有一段javascript代码可以在任何给定的时间点执行。

最新更新