With this setup we can process the list of blog posts whenever the posts, or the comments change.
Great, `combineLatest` now enables us to handle the latest results of multiple **ongoing**`Observables`.
With this setup in place, we basically eliminated _over-fetching_. The list of `BlogPost` can be updated whenever the `posts$`, **or** the `comments$` change.
In the previous example we learned how to combine multiple HTTP Requests into one stream with `forkJoin`.
Often operators are special forms or sub forms of other operators.
Often operators are special forms or sub forms of other operators.
If we take a look at the overview of combination patterns we realize that 2 of the look similar, forkJoin and combine.
If we take a look at the overview of combination patterns we realize that tow of them look very similar, forkJoin and combine.
They both process the values of the included Observables together, but `combineLatest` in comparison to `forkJoin` allows us to
Both combine the values of the source Observables to one emission, but `combineLatest` in comparison to `forkJoin` does not rely
process **every new value** with the latest values of the other included Observables.
on all sources to complete. Thus allowing us to process ongoing Observables. If any of the sources emits **a new value**, the
result will update to the **latest values** of each source.


An example of processing ongoing Observables with `combineLates` looks like that:
An example of processing ongoing Observables with `combineLatest`:
```Typescript
```Typescript
import { interval, combineLatest } from "rxjs";
import { interval, combineLatest } from 'rxjs';
import { map } from "rxjs/operators";
import { map } from 'rxjs/operators';
const source1$ = interval(1000);
const source1$ = interval(1000); // ongoing, never completing source
const source2$ = interval(1000).pipe(map(i => i * 10));
const source2$ = interval(1000).pipe(map(i => i * 10));