在process.exit(0)执行之前,Node.js fs.writeFile是异步的

时间:2016-05-23 22:18:16

标签: node.js fs

我在SO上发现了这个问题,但没有找到任何好的答案。

我正在使用节点0.10.40。

我正在使用child_process.execFile生成子进程,在此过程中,我正在使用fs.writeFile进行一些文件I / O.但是,在process.exit(0)的回调执行或filo I / O完成之前,该进程将以fs.writeFile退出。

关于如何延迟退出而不是 setTimeout的流程的任何想法。我想要使用超时,因为如果我这样做,我也可以使用fs.writeFileSync。有没有人找到解决这个问题的方法?

[编辑]

简单地将process.exit(0)放在fs.writeFile的回调中并不是我在这里寻找的因为考虑这种情况:

  

您有一个产生子进程的程序。在这些子进程中,您执行HTTP请求,转储数据包数据,对数据包数据执行逻辑,然后终止进程

所以基本上将process.exit(0)放在writeFile的回调中,当你子进程执行的唯一事件就是这个文件I / O时。但是在更大的范围内,如果您真的想在此过程中执行相当数量的逻辑并且不时“转储”信息,则这将不起作用。 此过程的“生命周期”不依赖于文件I / O 。它取决于您对数据包数据执行的逻辑。在这种情况下,转储更多用于回顾和调试。

1 个答案:

答案 0 :(得分:3)

您只需要确保在process.exit();的回调中呼叫fs.writeFile,例如:

文件index.js:

var child_process = require('child_process');

child_process.exec('node b.js', function(error, stdout, stderr){
    console.log(stdout);
});

文件b.js:

var fs = require('fs');

var count = 0;

function ret(aux){
  count++;
  if(count==4){
    console.log("done i/o operation");
    count = 0;
    process.exit();
  }
}
fs.writeFile('message.txt', 'writing something...', 'utf8', ret); 
fs.writeFile('message.txt', 'writing something...', 'utf8', ret);
fs.writeFile('message.txt', 'writing something...', 'utf8', ret);
fs.writeFile('message.txt', 'writing something...', 'utf8', ret);

编辑: 我在评论中提到了多个I / O调用,基本上,您可以计算调用回调的次数,当它达到预定义值时,您调用process.exit();