Is it possible to recover from a node stream error? For example with promises you can do something like
async function getThumbnail(id, width, height) {
try {
const thumbnail = await readThumbnail(id, width, height);
return thumbnail;
} catch {
// The thumbnail doesn't exist, so we will create and cache it
const thumbnail = await createThumbnail(id, width, height);
return thumbnail;
}
}
If readThumbnail()
returns a stream rather than a promise is it possible to recover from a stream error if the thumbnail doesn't exist? The goal is for the getThumbnail()
method to always return a working stream regardless of whether the thumbnail exists or not.
I found a way to to do it using a third stream
function getThumbnail(id, width, height) {
const readable = new PassThrough();
readThumbnail(id, width, height)
// It is important that this error handler is above the pipe
.on('error', error => {
createThumbnail(id, width, height).pipe(readable);
})
.pipe(readable);
return readable;
}