在RXJS 6.5中,不赞成使用以下代码中的CombineLatest签名:
import { combineLatest, interval } from 'rxjs';
import { map, take } from 'rxjs/operators';
const a$ = interval().pipe(
take(3),
map( x => `a: ${x}`)
);
const b$ = interval().pipe(
take(3),
map( x => x + 10 ),
map( x => `b: ${x}`)
);
combineLatest(a$, b$, (a, b) => `${a} / ${b}`)
.subscribe(x => console.log(x));
输出为:
a: 0 / b: 10
a: 1 / b: 10
a: 1 / b: 11
a: 2 / b: 11
a: 2 / b: 12
这里的问题是调度程序。弃用消息并不能真正帮助我:
//使用调度程序(不推荐使用)/ ** @不推荐使用传递调度程序 这里已弃用,请使用{@link subscriptionOn}和/或{@link watchOn} 代替* /
如何使此代码与RXJS 6.5兼容?
答案 0 :(得分:2)
由于@cartant的评论,我现在可以回答我自己的问题:
combineLatest([a$, b$])
.pipe(map( x => ((a, b) => `${a} / ${b}`)(...x)))
.subscribe(x => console.log(x));
答案 1 :(得分:0)
我在传递变量时遇到同样的错误。您可以忽略管道。
{
const values: Observable<any[]>[] = Object.values(subscriptions$);
return combineLatest<string[][]>(values).pipe(
map((variableValues) => {
let newInput = input;
variableValues.forEach((variableValue, i) => {
const key = keys[i];
const value = variableValue.find(v => v !== undefined);
const regex = new RegExp(`${this.escapeRegExp(key)}`, 'g');
newInput = newInput.replace(regex, value);
});
return newInput;
})
);
}
弃用消息:
(alias) combineLatest<string[][]>(...observables: (Subscribable<never> | Subscribable<any> | PromiseLike<any> | InteropObservable<any> | ArrayLike<any> | Iterable<...> | SchedulerLike | ((...values: any[]) => string[][]))[]): Observable<...> (+38 overloads)
import combineLatest
@deprecated — Passing a scheduler here is deprecated, use {@link subscribeOn} and/or {@link observeOn} instead
'(...observables: (SchedulerLike | Subscribable<never> | Subscribable<any> | PromiseLike<any> | InteropObservable<any> | ArrayLike<...> | Iterable<...> | ((...values: any[]) => string[][]))[]): Observable<...>' is deprecatedts(6385)