如何从节点流错误中恢复?

How can I recover from node stream error?

是否可以从节点流错误中恢复?例如,对于 promises 你可以做类似

的事情
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;
    }
}

如果 readThumbnail() return 是流而不是承诺,如果缩略图不存在,是否可以从流错误中恢复? getThumbnail() 方法的目标是始终 return 工作流,无论缩略图是否存在。

我找到了使用第三个流的方法

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;
}