延迟在rxjs中意味着什么?

问题描述 投票:0回答:2

第一个例子

  • dom中有一个输入#输入,div#字段用于显示inputElem中输入的内容
  • 订阅 当我键入{..v.a..b.l.e}时,div#字段显示value在5s之后如预期 然后我停了一会儿然后在输入中键入{.of..this。} IMO延迟已经执行所以valueofthis应该立即出现,但实际上不是。有什么问题?

在第二个例子中

这两个例子有什么不同?

const Observable = Rx.Observable

const inputElem = document.getElementById('input')
const fieldElem = document.getElementById('field')
const inputTexts = Observable.fromEvent(inputElem, 'input')
                              .map(e => e.target.value)
                              .delay(5000)



inputTexts.subscribe(x=> fieldElem.textContent=x , 
                           ()=> {},
                           ()=> {console.log('completed')})


//2.
   var values = Observable.of(1,2,4,8)
                          .map(v => 2*v)
                          .delay(4000)

   values.subscribe(x => console.log(x))
javascript rxjs rxjs5
2个回答
1
投票

与所有Rx运算符一样,delay运算符通过返回应用运算符函数的新Observable来工作。它不会更改源Observable本身。

因此,在第二个示例中,将delay应用于values的行实际上没有任何效果。

   var values = Observable.of(1,2,4,8)
                          .map(v => 2*v)
   values.delay(4000) // Oops! we've lost the Observable returned from `delay`
   values.subscribe(x => console.log(x)) // prints without delay

您需要使用从delay返回的Observable,以使其表现得像您期望的那样。这通常通过链接来完成,例如:

   var values = Observable.of(1,2,4,8)
                          .map(v => 2*v)
                          .delay(4000)  // values gets return value of delay
   values.subscribe(x => console.log(x)) // prints to console after 4s

0
投票

documentation for delay说:

...此运算符时间将源Observable移动了以毫秒表示的时间量。保留值之间的相对时间间隔。

在您的第一个示例中,源Observable发出两个“输入”事件(值):一个在您第一次更改值时发出(在时间t = 0时),然后在几秒钟后发出一个(在t = n时)当你下次改变它。 delay运算符会使它们都延迟相同的时间(5秒),因此您可以看到它们在t =(0 + 5)= 5和t =(n + 5)时到达您的订户。第二个事件的延迟时间与第一个事件的数量相同,因此它们仍将是n秒。

在第二个例子中,Observable.of在几乎完全相同的时间(t = 0)发出它的每个值。在经过delay之后,结果值在t = 4时几乎同时到达您的订户。

© www.soinside.com 2019 - 2024. All rights reserved.