This lesson shows why it’s preferable to using withLatestFrom
instead of combineLatest
in certain scenarios.ios
Timer will continue until you enter the number in the input field:less
timer$ .do((x)=> console.log(x)) .combineLatest( input$.do((x)=> console.log(x)), (timer, input)=> ({count: timer.count, text: input}) ) .takeWhile((data)=> data.count <= 3) .filter((data)=> data.count === parseInt(data.text)) .reduce((acc, curr)=> acc + 1, 0) .subscribe( (x)=> console.log(x), err=> console.log(err), ()=> console.log('complete') );
In this case, withLatestFrom() works the same way:ui
timer$ .do((x)=> console.log(x)) .withLatestFrom( input$.do((x)=> console.log(x)), (timer, input)=> ({count: timer.count, text: input}) ) .takeWhile((data)=> data.count <= 3) .filter((data)=> data.count === parseInt(data.text)) .reduce((acc, curr)=> acc + 1, 0) .subscribe( (x)=> console.log(x), err=> console.log(err), ()=> console.log('complete') );
But let's say we only want the timer log out 3 times then it should hit the complete block, logout "complete":this
timer$ .do((x)=> console.log(x)) .takeWhile((data)=> data.count <= 3) .withLatestFrom( input$.do((x)=> console.log(x)), (timer, input)=> ({count: timer.count, text: input}) ) .filter((data)=> data.count === parseInt(data.text)) .reduce((acc, curr)=> acc + 1, 0) .subscribe( (x)=> console.log(x), err=> console.log(err), ()=> console.log('complete') );
then it only works with withLatestFrom() NOT combimeLatest().spa
The reason for that is combimeLatest require both timer$ and input$. But withLatestFrom() only need $timer.code