这里是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)
事件中调用finish
? finish
是否不关闭流?看起来很奇怪。
答案 0 :(得分:1)
在NodeJS 5.5.0之前,应用程序有责任关闭文件描述符并确保没有文件描述符泄漏。
在v5.5中,他们为方法autoClose
引入了createWriteStream
属性,默认值为true
,这意味着文件error
或finish
描述符将自动关闭。
您正在查看的来源是v5.5.0(2016-01-21)之前的