gpt4 book ai didi

javascript - Node.js 代码排序——是否有可能在监听器就位之前发出数据

转载 作者:行者123 更新时间:2023-12-02 17:34:50 25 4
gpt4 key购买 nike

此代码来自 Professional Node.js Building 基于 Javascript 的可扩展软件:

var spawn = require('child_process').spawn;

// Spawn the child with a node process executing the plus_one app
var child = spawn('node', ['06_plus_one.js']);

// Call this function every 1 second (1000 milliseconds):
setInterval(function() {

// Create a random number smaller than 10.000
var number = Math.floor(Math.random() * 10000);

// Send that number to the child process:
child.stdin.write(number + "\n");

// Get the response from the child process and print it:
child.stdout.on('data', function(data) {
console.log('child replied to ' + number + ' with: ' + data);
});
}, 1000);

child.stderr.on('data', function(data) {
process.stdout.write(data);
});

子进程只是增加从父进程传递的数字。 child.stdin.write() 是否有可能转到子进程,并且在父进程注册其 data 监听器之前,子进程已经发出 data事件?

还有第二个问题。该代码最初的子程序文件名不正确,从而引发错误。如何捕获来自spawn的错误?

最佳答案

  • 警告,检测到内存泄漏!不要在循环内附加监听器 (setInterval)。每一秒你都在添加一个监听器。将此代码放在 setInterval 回调之外:

    child.stdout.on('data', function(data) {
    console.log('child replied to ' + number + ' with: ' + data);
    });
<小时/>
  • 子进程只是增加从父进程传递的数字。 child.stdin.write() 是否可能转到子进程,并且在父进程注册其数据监听器之前,子进程已经发出数据事件?

    没有。两个原因:

    • 阅读之前的评论。您必须将监听器附加到 setInterval() 之外,就像 stderr.on("data") 一样。
    • child 将在稍后的时间里发送消息。在当前循环中,您编写消息,在未来的循环中,您会收到子级的响应。这是 1 个线程异步性的定义(在 javascript 层)。
<小时/>
  • 还有第二个问题。该代码最初的子程序文件名不正确,从而引发错误。如何从生成中捕获错误?

    你尝试过 try catch spawn()函数吗?

关于javascript - Node.js 代码排序——是否有可能在监听器就位之前发出数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22707430/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com