如何弃用CombineLatest的“项目”参数(在6.5版的rxjs中)

时间:2019-08-15 12:03:45

标签: rxjs

在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兼容?

2 个答案:

答案 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)