Если я использую функцию delay() следующим образом, она генерирует данные только после некоторой задержки:

const TIME_DELAY = 5000;
return new Observable(observer => {
  observer.next(res);
}).delay(TIME_DELAY);

Но мне нужно сначала передать данные, а затем отправлять их каждые миллисекунды TIME_DELAY. Как я могу это сделать?

0
Alex Chaliy 28 Май 2019 в 15:21

2 ответа

Лучший ответ

Для ваших требований timer делает именно это. Что-то вроде:

return timer(0, TIME_DELAY).pipe(
  map(() => res)
);

https://stackblitz.com/edit/typescript-v7auxo?file=index.ts

3
mbojko 28 Май 2019 в 12:27

Вы должны использовать функцию таймера, которая позволяет указать начальную задержку (0 в вашем случае), а затем интервал, в котором выбросы повторяются.

Например: const stream$ = timer(0, TIME_DELAY);

Если вам нужно привести результат к другому значению или наблюдаемому, вы можете добавить конвейер и операторы map или switchMap (в случае наблюдаемого). Например:

const stream$ = timer(0, TIME_DELAY)
 .pipe(map(() => 'some value'));

// or
const stream$ = timer(0, TIME_DELAY)
 .pipe(switchMap(() => anotherObservable$));


1
Harijs Deksnis 28 Май 2019 в 12:28