0

Here is a 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);
  });
};

Why file.close(cb) is called on finish event? Does not finish close a stream? Look strange.

Cherry
  • 31,309
  • 66
  • 224
  • 364

1 Answers1

1

Before NodeJS version 5.5.0 it was the application's responsibility to close the file descriptor and make sure there's no file descriptor leak.

In v5.5 they introduced the autoClose attribute for the method createWriteStream with a default value of true which means on error or finish the file descriptor will be closed automatically.

The source you're looking at was before v5.5.0 (2016-01-21)

Rami Jarrar
  • 4,523
  • 7
  • 36
  • 52