#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