为什么需要在nodejs流中完成后调用close?

时间:2019-06-01 15:17:18

标签: node.js stream

这里是source

var http = require('http');
var fs = require('fs');

var download = function(url, dest, cb) {
  var file = fs.createWriteStream(dest);
  var request = http.get(url, function(response) {
    response.pipe(file);
    file.on('finish', function() {
      file.close(cb);  // close() is async, call cb after close completes.
    });
  }).on('error', function(err) { // Handle errors
    fs.unlink(dest); // Delete the file async. (But we don't check the result)
    if (cb) cb(err.message);
  });
};

为什么在file.close(cb)事件中调用finishfinish是否不关闭流?看起来很奇怪。

1 个答案:

答案 0 :(得分:1)

在NodeJS 5.5.0之前,应用程序有责任关闭文件描述符并确保没有文件描述符泄漏。

在v5.5中,他们为方法autoClose引入了createWriteStream属性,默认值为true,这意味着文件errorfinish描述符将自动关闭。

您正在查看的来源是v5.5.0(2016-01-21)之前的