For your specific example, the idea is to map each value from the array to an observable that will yield its result after a delay, then concatenate the resulting stream of observables:
var delayedStream = Rx.Observable
.fromArray([1, 2, 3, 4, 5])
.map(function (value) { return Rx.Observable.return(value).delay(2000); })
.concatAll();
Other examples might indeed make use of timer
or interval
. It just depends.
For example, if your array is really really big, then the above will cause a fair amount of memory pressure (because it is creating N
observables for a really large N
). Here is an alternative that uses interval
to lazily walk the array:
var delayedStream = Rx.Observable
.interval(2000)
.take(reallyBigArray.length) // end the observable after it pulses N times
.map(function (i) { return reallyBigArray[i]; });
This one will yield the next value from the array every 2 seconds until it has iterated over the entire array.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…