延迟时间如何在可观测对象中工作?

时间:2018-08-02 15:57:39

标签: angular observable reactive-programming reactive-extensions-js

我对Rxjs有点困惑。 我正在尝试使用可观察的计时器。

下面是链接

https://jsfiddle.net/vpx0y8fu/375/

考虑下面的代码片段,我将消息作为源,该消息在1秒后发出值。我使用了delayWhen运算符,它延迟了源发出的每个值。但是,当我订阅延迟的可观测对象时,它仅具有初始延迟,即在第一个值发出之后,每个值都以1秒的间隔发出。

//emit value every second
   const message = Rx.Observable.interval(1000);
   //emit value after five seconds
  //after 5 seconds, start emitting delayed values
  const delayWhenExample = message.delayWhen(() => 
  Rx.Observable.interval(4000));
  //log values, delayed for 5 seconds
  //ex. output: 5s....1...2...3
  const subscribe = delayWhenExample.subscribe(val => 
  console.log(val));

但是当我使用下面的代码片段

//emit value on click
const message1 = Rx.Observable.fromEvent(document, 'click');
//emit value after five seconds
//after 5 seconds, start emitting delayed values
const delayWhenExample1 = message1.delayWhen(() => Rx.Observable.interval(4000));
//log values, delayed for 5 seconds
//ex. output: 5s....1...2...3
const subscribe1 = delayWhenExample1.subscribe(val => console.log(val));

每次点击都会延迟4秒。

谁能指出我无法理解的区别?

在上述示例的每个源可观察对象中,值发出时,它应延迟4秒,但在第一个示例中不会发生,而第二个示例按预期进行。

请为我建议使用上述实现的计时器实现,因为我不想进行时间计算。

0 个答案:

没有答案