Я пытаюсь поймать завершение записи потока холст таким образом:Node.js stream.on («конец» ... не делает файл читаемым
var out = fs.createWriteStream(out_fs);
var stream = canvas.createPNGStream({
bufsize: 2048
});
stream.on('end', function() {
// can we use out_fs now? why not?
});
stream.pipe(out);
Но когда я пытаюсь загрузить out_fs
в суб функция
Error: Image given has not completed loading
на этой линии:
fs.readFile(out_fs, function (err, data) {
if (err) throw err;
var img = new Canvas.Image; // Create a new Image
img.src = data;
ctx2.drawImage(img, 0, 50, img.width, img.height); <--
http://nodejs.org/api/stream.html#stream_event_end
Но я не вижу другого способа продолжить управление потоком после того, как будет записан поток. Если я верну всю родительскую функцию, тогда файл будет считаться читаемым. Я пробовал обернуть свои дочерние функции в setImmediate()
, но это, похоже, работает с перерывами.
Каков окончательный способ уловить конечный конечный результат записи потока?
документация узла холст утверждает, что end
события сигнализирует окончательную запись файла: https://www.npmjs.com/package/canvas#canvaspngstream
Но это порождает ошибку выше, если вы сразу же попытаться использовать его.
`finish ', похоже, не реализован вообще.
Вы бы подумали, что это сработает, но его вообще не называют. – metalaureate
'.on ('end')' должно быть достаточно, я думаю, вы должны разместить больше кода, так как может возникнуть проблема с потоком управления (что-то работает, прежде чем вы подумаете и т. Д.). – aarosil
@aarosil ok Я не горжусь пирамидой гибели - вы, вероятно, правы. Но по существу я генерирую один объект canvas, а затем создаю второй объект canvas, который представляет собой монтаж первых + двух внешних файлов img. http://pastebin.com/E0J1QTvr – metalaureate