提问人:sahil aktar 提问时间:12/20/2021 最后编辑:Apoorva Chikarasahil aktar 更新时间:12/20/2021 访问量:677
Node js 子进程事件发射器与回调
Node js Child process event emitter vs callbacks
问:
在 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 中获取输出数据。使用回调或事件侦听器(两者都是异步的)有什么区别吗?
答:
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 上检查一下。
评论