Зачем нужно вызывать close после финиша в потоке nodejs? - PullRequest
0 голосов
/ 01 июня 2019

Вот источник :

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) вызывается на finish событии? finish не закрывает поток? Выглядит странно.

1 Ответ

1 голос
/ 01 июня 2019

До NodeJS версии 5.5.0 приложение отвечало за закрытие файлового дескриптора и проверку на утечку файлового дескриптора.

В v5.5 они ввели атрибут autoClose для метода createWriteStream со значением по умолчанию true, что означает, что при error или finish дескриптор файла будет закрыт автоматически.

Источник, на который вы смотрели, был до v5.5.0 (2016-01-21)

...