【问题标题】:Node js Child process event emitter vs callbacksNode js子进程事件发射器与回调
【发布时间】:2022-01-21 20:03:58
【问题描述】:

在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)
})  

在上面的代码中,我使用事件侦听器进行输出,并且在 Windows 中获取标准输出数据,但无法在 macOS 中获取输出。但是如果我使用像 -

这样的回调
const execute = require('child-process').exec;

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

我在 windows 和 mac 中都获得了输出数据。使用回调或事件监听器(两者都是异步的)有什么区别吗?

【问题讨论】:

    标签: javascript node.js events callback


    【解决方案1】:

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

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

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

    【讨论】:

    • Chikara vai 我理解回调和事件的概念。但不明白为什么在 windows 中使用事件对 child_process exec() 有效,但在 macOS 上无效。
    • 让我在 mac 上检查一下。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-17
    • 1970-01-01
    • 1970-01-01
    • 2017-04-04
    • 1970-01-01
    • 1970-01-01
    • 2019-04-19
    相关资源
    最近更新 更多