SlowWriterFactory = {
const {Subject, interval, concat} = Rx;
const {map, take, startWith, concatMap} = Operators;
return class SlowWriterFactory {
static createWriter() {
const messages$ = new Subject();
const writer$ = messages$.pipe(
concatMap(([message, delay]) => {
const length = message.length;
return interval(delay).pipe(
take(length - 1),
map(index => index + 1),
startWith(0),
map(index => message[index]),
)
})
);
return {
getWriter: () => writer$,
write: (message, delay) => messages$.next([message, delay])
}
}
}
}