首页 > 解决方案 > 在 Node.js 中如何为每个动态创建的子进程建立超时回调?

问题描述

假设我有一个循环,每次迭代都会创建一个子进程,如何为每个子进程创建一个超时回调函数,或者一个可以为所有子进程提供服务的函数?

var theSpawn = require("child_process").spawn;
for (var i=0; i<4;i++) {
      theChild = spawn('ls', ['/']);
}

标签: node.js

解决方案


目前尚不清楚您要使用单独的回调来完成什么。返回的子进程对象spawn()是一个 eventEmitter,它支持许多事件:

const spawn = require("child_process").spawn;
for (let i=0; i<4;i++) {
      let child = spawn('ls', ['/']);
      child.on('close', () => {
         console.log(`child ${i} closed`);
      });
}

如果您尝试为每个孩子创建某种超时,您可以在循环中执行此操作:

const spawn = require("child_process").spawn;
for (let i=0; i<4;i++) {
      const child = spawn('ls', ['/']);
      const timer = setTimeout(() => {
          console.log(`Hit timeout on child ${i} before it closed`);
      }, 10 * 1000);
      child.on('close', () => {
          clearTimeout(timer);
          console.log(`child ${i} closed`);
      });
}

推荐阅读