我有一个 node.js 程序,我在其中使用流将信息写入 SFTP 服务器。像这样的东西(简化版):
var conn = new SSHClient();
process.nextTick(function (){
conn.on('ready', function () {
conn.sftp(function (error, sftp) {
var writeStream = sftp.createWriteStream(filename);
...
writeStream.write(line1);
writeStream.write(line2);
writeStream.write(line3);
...
});
}).connect(...);
});
注意我没有使用(可选)回调参数(在write() API 规范中描述),我不确定这是否会导致不良行为(即未按以下顺序写入的行:line1、line2、line3) . 换句话说,我不知道是否应该使用这种替代方案(更复杂的代码并且不确定效率是否更低):
writeStream.write(line1, ..., function() {
writeStream.write(line2, ..., function() {
writeStream.write(line3);
});
});
(或使用async series()的等效替代方案)
根据经验,在我的测试中,我总是以所需的顺序写入文件(我的意思是,首先是 line1,然后是 line2,最后是 line3)。但是,如果这只是偶然发生,或者上面是使用 write() 的正确方法,我现在不知道。
我知道在流中写入通常是异步的(因为所有 I/O 工作都应该是)但我想知道 node.js 中的流是否保持内部缓冲区或类似的保持数据有序,所以每个 write() 调用都不会返回直到数据被放入这个缓冲区。
非常欢迎在实际程序中使用 write() 的示例。谢谢!