Node.js写流同步
Node.js WriteStream synchronous
我在node.js中编写一个纯同步的单线程命令行程序,它需要编写一个二进制文件,为此我使用WriteStream
。我的使用模式如下:
var stream = fs.createWriteStream(file)
stream.write(buf1)
stream.write(buf2)
这似乎可以工作,但文档说它是异步的,我想确保我写的代码不是99%的时间工作。我不关心数据写入的确切时间,只要它按照指定的顺序写入,并且不迟于程序退出,并且数据量很小,因此速度和内存消耗不是问题。
我已经看到提到stream.end()
,但它似乎没有它工作,我也看到的建议,调用它可能实际上是一个坏主意,如果你不使用回调,因为它可能最终被调用之前,所有的数据写入。
我的方法是正确的(假设我想要纯同步)还是有什么我需要注意的?
您可以这样做,唯一的问题是如果您为同一路径创建两个或多个并发流:来自不同流的写顺序将未定义。顺便说一下,在节点:fs.SyncWriteStream
中有一个同步的fs写流实现。它是私有的,需要fd
作为一个参数,但是如果你真的想要它…
我正在研究一个时间关键的API,在执行下一个操作之前,必须编写新文件并完全处理其流。解决方案,在我的情况下(很可能,OP的问题)是使用:
writer.on('finish', () => {
console.error('All writes are now complete.');
});
按照fs Event: 'finish'
文档
const writeToLocalDisk = (stream, path) => {
return new Promise((resolve, reject) => {
const istream = stream;
const ostream = fs.createWriteStream(path);
istream.pipe(ostream);
istream.on("end", () => {
console.log(`Fetched ${path} from elsewhere`);
resolve();
});
istream.on("error", (err) => {
console.log(JSON.stringify(err, null, 2));
resolve();
});
});
};
// Then use an async function to perform sequential-like operation
async function sequential (stream) {
const path = "";
await writeToLocalDisk(stream, path);
console.log('other operation here');
}
相关文章:
- 与运行长作业(javascript,node.js)的第三方API同步的最佳实践
- 如何将Knockout.JS与服务器已经在DOM中呈现的数据同步
- javascript函数中的异步与同步.(Node.js)
- Node.js和同步API函数
- strongloop script.js run find in before delete方法:如何同步运行异步方法
- 如何制作'http请求'在Node js中同步
- 如何使用selenium和同步JS进行屏幕截图
- node.js,async,restify:无法使restify调用在async.series内同步
- 在 Backbone.js 中创建自定义“同步”方法
- 在表单同步提交后执行 js 吗?
- jQuery/JS:从服务器同步读取文本文件
- 节点.js / 续集.js / 快递.js - 如何插入多对多关联?(同步/异步?
- javascript如何成为一种同步语言并在浏览器和node.js环境中异步运行
- 如何使用node.js和promise编写同步while循环
- node.js和hapi:同步从数据库中获取数据
- Node.js同步调用passport本地注册
- 无法弄清楚如何在节点.js中使用同步.js
- 相当于同步JS中的XMLHttpRequest超时
- 从同步JS函数返回承诺
- 任何可用于自动同步.js文件的工具