我正在尝试将pdfkit从png-js迁移到pngsj2,因为png-js不支持隔行png。我需要以同步方式加载PNG文件。我试着这样做:
var fs = require('fs'),
PNG = require('pngjs2').PNG;
var stream = require('stream');
var bufferStream = new stream.PassThrough();
var buf = fs.readFileSync('./logs/rid12.png');
bufferStream.end(buf);
var png = null;
bufferStream.pipe(new PNG())
.on('parsed', function() {
console.log("here");
png = this;
});
console.log("there",png);
"there"出现在"here"之前,所以PNG为空。是否有可能管道内存缓冲区到PNG解析器,这样我就不必做回调架构?
没有办法使异步方法同步。
有一些库,如https://github.com/scriby/asyncblock,可能能够做到这一点。
asyncblock(function(flow) {
var png = null
flow.sync( bufferStream.pipe(new PNG())
.on('parsed', function() {
console.log("here");
png = this;
flow.callback()
})
);
// png not null
});