Reputation: 4206
After running the rxjs migration tool using
rxjs-5-to-6-migrate -p src/tsconfig.app.json
I'm now getting a linting error:
combineLatest is deprecated: Deprecated in favor of static combineLatest.
Here is my code before running the migration command:
this.store.combineLatest(
this.store.select(lang.getCurrent),
this.store.select(lang.getCurrentLocale)
).subscribe(([state, currentLang, locale]) => {
this._language = session.language === currentLang ? '' : currentLang;
this._locale = session.locale === locale ? '' : locale;
});
My code after running the migration command: (currently presenting a linting error)
import {map, combineLatest} from 'rxjs/operators';
this.store.combineLatest(
this.store.select(lang.getCurrent),
this.store.select(lang.getCurrentLocale)
).subscribe(([state, currentLang, locale]) => {
this._language = session.language === currentLang ? '' : currentLang;
this._locale = session.locale === locale ? '' : locale;
});
The question was asked in this stackoverflow questions, but it was not specific enough: Angular 6 ng lint duplicate errors and warnings, combineLatest is deprecated .
Upvotes: 114
Views: 131002
Reputation: 15083
Seems combineLatest
has been deprecated and passing an array as suggested in the various answers still throws the error in rxjs v.7.0.0 Deprecation Notice
Replaced with
combineLatestWith
. Will be removed in v8.
For those using rxjs v.7.0.0 and above you will need to use combineLatestwith
input1Changes$.pipe(
combineLatestWith(input2Changes$)
)
Upvotes: 9
Reputation: 173
import { combineLatest } from 'rxjs';
combineLatest([
this.store.select(lang.getCurrent),
this.store.select(lang.getCurrentLocale)
]).subscribe(([state, currentLang, locale]) => {
this._language = session.language === currentLang ? '' : currentLang;
this._locale = session.locale === locale ? '' : locale;
});
Upvotes: 3
Reputation: 4206
Please refer to ofir fridman's answer for the correct syntaxs as of RxJs 6.5
I found an answer in this article titled: RxJS 6: What's new and what has changed? ( which comes from official docs):
The solution is to convert:
import { combineLatest } from 'rxjs/operators';
a$.pipe(combineLatest(b$, c$));
into:
import { combineLatest } from 'rxjs';
combineLatest([a$, b$, c$]);
Upvotes: 113
Reputation: 821
combineLatest with a list of subscribers:
combineLatest([aSubscriber, bSubscriber]).pipe(map((aRes, bRes)=>{
// your business logic
}));
Upvotes: 0
Reputation: 2789
import { combineLatest } from 'rxjs';
combineLatest([a$, b$, c$]);
And for most applications it's helpful to map the array of observables to a new value as well:
combineLatest([a$, b$, c$]).pipe(
map(([a$, b$, c$]) => ({
a: a$,
b: b$,
c: c$
}))
);
Also see: https://www.learnrxjs.io/learn-rxjs/operators/combination/combinelatest
Upvotes: 143
Reputation: 87
rxjs version 6.4.0
You should import map operator from RxJs operators for it to work
combineLatest(a$, b$, c$).pipe(map([a, b, c]) => treat(a, b, c))
Upvotes: 6