以前我使用的是rxjs-5,我使用的是observable.partition,如下所示:
const [isTiming$, isNotTiming$] = this.store.select(state => state.tetris.isTiming)
.partition(value => value);
升级angular
到8
之后,rxjs
升级到rxjs-6
,开始抛出以下错误:
providers/timer.provider.ts(27,5): error TS2339: Property 'partition' does not exist on type 'Observable<boolean>'.
当我签入旧的rxjs实现时,它的实现如下:
import { Observable } from '../Observable';
import { partition as higherOrder } from '../operators/partition';
/**
* Splits the source Observable into two, one with values that satisfy a
* predicate, and another with values that don't satisfy the predicate.
*/
export function partition<T>(this: Observable<T>, predicate: (value: T, index: number) => boolean, thisArg?: any): [Observable<T>, Observable<T>] {
return higherOrder(predicate, thisArg)(this);
}
发布于 2019-06-15 01:52:50
在看了github转换之后
我认为我们应该放弃分区操作符,并为v7删除它。
原因:
const partition = (predicate) => [source.pipe(filter(predicate)), source.pipe(filter((x, i) => !predicate(x, i)))]
就你而言:
import {filter} = "rxjs/operators"
const source = this.store.select(state => state.tetris.isTiming);
const partition = (predicate) => [source.pipe(filter(predicate)), source.pipe(filter((x, i) => !predicate(x, i)))]
const [isTiming$, isNotTiming$] = partition(value => value);
发布于 2019-06-15 01:52:58
我请您使用可观察的方法pipe
,如下所示:
const [isTiming$, isNotTiming$] = this.store.select(state => state.tetris.isTiming)
.pipe(
partition(value => value);
)
https://stackoverflow.com/questions/56609155
复制