I have the following RxJS code: code example
/* The result is: 4 9 15 4 9 15 */
... why does the second scan
start from the beginning (4,9,15) and does not continues from the previous scan
(displaying 19,24,30). It is the same stream after all?
Asked
Active
Viewed 102 times
0

Janusz Dalecki
- 197
- 1
- 10
-
Maybe interesting for you is to learn the 'difference' between of and from. https://stackoverflow.com/questions/42704552/of-vs-from-operator – Martijn Bakker Mar 31 '22 at 07:11
1 Answers
1
observables does not work like that. You have to see them as a flow of water, where you can change the water with operators. Every time you do something with numbers$ you are starting a new flow of water. So the first pipe has nothing to do with the other pipe and vice versa.
If you want to have return value about the first scan you have to save the return value of the pipe and extend it with an extra pipe.
// 'scan' test
let numbers$ = from([4, 5, 6]);
let val1 = numbers$
.pipe(
// Get the sum of the numbers coming in.
scan((total, n) => {
return total + n
}),
// Get the average by dividing the sum by the total number
// received so var (which is 1 more than the zero-based index).
//map((sum, index) => sum / (index + 1))
)
val1.subscribe(x => console.log('value of the first scan is', x))
val1.pipe(
scan((total, n) => {
return total + n
})
).subscribe(console.log);
Or you can add another scan into the pipe. But then you will lose the value of the first scan:
let numbers$ = from([4, 5, 6]);
numbers$
.pipe(
// Get the sum of the numbers coming in.
scan((total, n) => {
return total + n
}),
scan((total, n) => {
return total + n
})
// Get the average by dividing the sum by the total number
// received so var (which is 1 more than the zero-based index).
//map((sum, index) => sum / (index + 1))
).subscribe(x => console.log('value of the second scan is', x))

Martijn Bakker
- 395
- 1
- 5
- 15