在节点程序中,我正在使用fs.createReadStream
从文件流中读取。但当我暂停流程时程序退出。我认为程序会继续运行,因为文件仍然打开,只是没有被读取。
目前为了让它不退出我设置了一个什么都不做的间隔。
setInterval(function() {}, 10000000);
当我准备让程序退出时,我清除它。但是有更好的方法吗?
var fs = require('fs');
var rs = fs.createReadStream('file.js');
rs.pause();
答案 0 :(得分:6)
当没有排队的工作时,节点将退出。在pause
上拨打ReadableStream
只会暂停data
事件。此时,不再发出任何事件,也没有未完成的工作请求,因此Node将退出。 setInterval
起作用,因为它算作排队工作。
通常这不是问题,因为在暂停该流后你可能会做某事。一旦你resume
流,就会有一堆排队的I / O,你的代码将在Node退出之前执行。
让我举个例子。这是一个退出而不打印任何内容的脚本:
var fs = require('fs');
var rs = fs.createReadStream('file.js');
rs.pause();
rs.on('data', function (data) {
console.log(data); // never gets executed
});
流暂停,没有出色的工作,我的回调永远不会运行。
但是,这个脚本确实打印输出:
var fs = require('fs');
var rs = fs.createReadStream('file.js');
rs.pause();
rs.on('data', function (data) {
console.log(data); // prints stuff
});
rs.resume(); // queues I/O
总之,只要你最后打电话给resume
,你应该没事。