代码之家  ›  专栏  ›  技术社区  ›  sahil aktar

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

  •  1
  • sahil aktar  · 技术社区  · 3 年前

    在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中获取输出数据。使用回调或事件监听器(都是异步的)有什么区别吗?

    1 回复  |  直到 3 年前
        1
  •  0
  •   Apoorva Chikara    3 年前

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

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

    您可以检查 this stackoverflow上用于差异黑白回调和事件的链接。