Node js 子进程事件发射器与回调

Node js Child process event emitter vs callbacks

提问人:sahil aktar 提问时间:12/20/2021 最后编辑:Apoorva Chikarasahil aktar 更新时间:12/20/2021 访问量:677

问:

在 nodejs 中为子进程附加回调或事件侦听器之间有什么区别吗?喜欢-

const execute = require('child-process').exec;
const process = execute('ping -n 1 www.google.com'); // or ping -c 1 www.google.com for mac

process.stdout.on('data', data => {
    console.log(data)
})  

在上面的代码中,我使用事件侦听器进行输出,并且在窗口中获取 stdout 数据,但在 macOS 中无法获取输出。但是如果我使用像这样的回调 -

const execute = require('child-process').exec;

execute('ping -c 1 www.google.com', (error, stdout, stderr) => {
   console.log(stdout);
})

我在 Windows 和 Mac 中获取输出数据。使用回调或事件侦听器(两者都是异步的)有什么区别吗?

JavaScript 节点.js 事件 回调

评论


答:

0赞 Apoorva Chikara 12/20/2021 #1

当该异步任务的执行完成时,将调用 。但是,必须根据观察者触发事件。每个事件都有侦听器,当触发事件时,其相关的侦听器函数将开始执行。callback

  • 您可以将多个侦听器附加到同一事件。回调是 一对一通知,事件 - 一对多。
  • 不能从事件中返回值。事件是单向消息。 通常,回调遵循 (error, data1, data2, data3, ...) 签名 因为负责正常和错误数据流的单个回调 (异步库通常期望这种行为)
  • 另一方面,基于 EventEmitter 的 API 倾向于将错误和 非错误消息
  • “error”事件在事件发射器中是特殊的:如果没有侦听器 为此,EventEmitter 会引发异常。有了回调,它就是你的 负责检查第一个错误参数。

您可以在 stackoverflow 上查看链接,了解不同的黑白回调和事件。

评论

0赞 sahil aktar 12/20/2021
Chikara vai 我理解回调和事件的概念。但是不明白为什么使用事件适用于 Windows 中的 child_process exec(),而在 macOS 上则不然。
0赞 Apoorva Chikara 12/20/2021
让我在 mac 上检查一下。