Возможно, вы захотите создать Observable в случаях, когда ваш обратный вызов вызывается повторно, и вы хотите уведомить поток событий в результате вызываемого обратного вызова.
Давайте рассмотрим, в качестве примера, функция node readline
, которая принимает обратный вызов, который запускается при каждом чтении строки, и второй обратный вызов, который вызывается при достижении конца файла.
В этом случае мы можем создать Observable, который генерирует для каждая строка читается и завершается при достижении конца, как в следующем примере
function readLineObs(filePath: string) => {
return new Observable(
(observer: Observer<string>): TeardownLogic => {
const rl = readline.createInterface({
input: fs.createReadStream(filePath),
crlfDelay: Infinity,
});
rl.on('line', (line: string) => {
observer.next(line);
});
rl.on('close', () => {
observer.complete();
});
},
);
};