与node.js中的fs.createWriteStream关联的事件

use*_*745 22 stream node.js

在写入流时达到EOF时会触发什么事件?我的代码如下.并且它是作为每http://docs.nodejitsu.com/articles/advanced/streams/how-to-use-fs-create-write-stream

但令人惊讶的是,我的"终结"事件从未被解雇过.当我检查http://nodejs.org/api/stream.html#stream_event_end,我看到写流上没有"结束"无论如何


var x = a1.jpg;
var options1 = {'url': url_of_an_image, 'encoding': null};
var r = request(options1).pipe(fs.createWriteStream('/tmp/imageresize/'+x));

r.on('end', function(){
    console.log('file downloaded to ', '/tmp/imageresize/'+x);
}
Run Code Online (Sandbox Code Playgroud)

如何捕获EOF事件?

Leo*_*tny 70

2013年10月30日更新

当底层资源完成写入时,可读Steams 会发出close事件.

r.on('close', function(){
  console.log('request finished downloading file');
});
Run Code Online (Sandbox Code Playgroud)

但是如果你想抓住fs完成向光盘写入数据的那一刻,就需要Writeable Stream finish事件:

var w = fs.createWriteStream('/tmp/imageresize/'+x);

request(options1).pipe(w);

w.on('finish', function(){
  console.log('file downloaded to ', '/tmp/imageresize/'+x);
});
Run Code Online (Sandbox Code Playgroud)

  • 我会在调用请求之前绑定事件来完成.这是一种竞争条件,只是碰巧对你有利,不是吗? (4认同)
  • @LeoRomanovsky不,这不是竞争条件,因为我正在同步注册我的事件处理程序.node.js中的流是异步的,因此在node.js事件循环的下一个滴答之前不会触发任何事件. (4认同)