RxJS:延迟前发出初始值

时间:2019-05-28 12:21:58

标签: angular rxjs

如果我像这样使用delay()函数,它只会在经过一段时间后才发出数据:

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

但是我需要首先发出数据,然后每TIME_DELAY毫秒发出一次。 我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:2)

根据您的要求,timer正是这样做的。像这样:

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

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

答案 1 :(得分:1)

您应该使用timer函数,该函数允许您指定初始延迟(在您的情况下为0),然后指定排放重复的时间间隔。

例如:const stream$ = timer(0, TIME_DELAY);

如果需要将结果强制转换为另一个值或可观察的值,则可以添加管道和mapswitchMap(在可观察的情况下)运算符。 例如:

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

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