然后订阅
value
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))
答案 0 :(得分:1)
delay运算符与所有Rx运算符一样,通过返回应用运算符函数的 new 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
答案 1 :(得分:0)
...此运算符时间将源Observable移动了该数量 时间以毫秒表示。 之间的相对时间间隔 值保留。
在您的第一个示例中,源Observable发出两个“输入”事件(值):第一次更改值时发出的一个(在时间t = 0时),然后在几秒钟后发出一个(在t处) = n)当你下次更改它时。 delay
运算符会导致它们延迟相同的时间(5秒),因此您会看到它们在t =(0 + 5)= 5和t =(n + 5)时到达您的订阅者。第二个事件的延迟时间与第一个相同,因此它们相隔n
秒。
在第二个示例中,Observable.of
几乎完全在同一时间(t = 0)发出每个值。完成delay
后,结果值会在t = 4时几乎同时到达您的订阅者。