Наблюдаемые значения выдачи не задерживаются

#rxjs

#rxjs

Вопрос:

Я пытаюсь создать наблюдаемый объект, который будет выдавать отложенные значения. Однако значения получаются мгновенно. Я создал stackblitz в https://stackblitz.com/edit/typescript-cwixas. Код приведен ниже:

 import { of } from 'rxjs';
import { map, delay } from 'rxjs/operators';

const arr = [1,2,3,4,5];
const source = of(...arr);
const source2 = source.pipe(delay(2000));
const subscribe = source2.subscribe(val => console.log(val));
  

Комментарии:

1. требуется ли задерживать каждое значение или только массив?

2. каждое значение массива должно выдаваться с интервалом в 2 секунды. Выдайте 1, подождите 2 секунды, выдайте 2, подождите 2 секунды и так далее..

Ответ №1:

delay() Оператор просто добавляет задержку к каждому next значению, но ему все равно, прошла ли предыдущая задержка.

Итак, что здесь происходит, так это то, что of() сразу же выдает 5 значений, где все 5 должны быть повторно отправлены delay одновременно через 2 секунды.

Вам придется использовать, например, concatMap который будет проецировать каждое значение в Observable и ждать, пока это не завершится. Только после этого продолжайте с другим значением:

 const arr = [1,2,3,4,5];
const source = of(...arr).pipe(
  concatMap(value => of(value).pipe(
    delay(2000),
  )),
);

source.subscribe(...);
  

Демонстрационная версия вашего обновления: https://stackblitz.com/edit/typescript-cknhbr?file=index.ts