相关疑难解决方法(0)

如何使用RxJs distinctUntilChanged?

我开始使用RxJs(使用v5测试版),但不知怎的,我无法弄清楚如何使用它distinctUntilChanged.如果我在babel-node中运行它,下面代码的输出是

[ 'a', 1 ]
{ key: 'a', state: 1 }
Next:  { value: 42 }
Completed
Run Code Online (Sandbox Code Playgroud)

这不是我所期望的.为什么只有一个条目通过distinctUntilChanged?我希望输出是

[ 'a', 1 ]
[ 'a', 0 ]
[ 'a', 1 ]
{ key: 'a', state: 1 }
{ key: 'a', state: 2 }
{ key: 'a', state: 0 }
{ key: 'a', state: 1 }
Next:  { value: 42 }
Next:  { value: 24 }
Completed
Run Code Online (Sandbox Code Playgroud)

这是代码

import {Observable} from 'rxjs'

Observable.of(['a', 1], ['a', 1], ['a', 0], …
Run Code Online (Sandbox Code Playgroud)

javascript rxjs rxjs5

19
推荐指数
1
解决办法
2万
查看次数

Rxjs `distinctUntilChanged()` 似乎不起作用

在 rxjs 流中,我使用distinctUntilChangedlodashisEqual来过滤掉重复值。但是,它似乎没有按预期工作。取下面的代码片段

import { isEqual } from 'lodash-es';

let cachedValue: any;

function testFn(observableVal: Observable<any>) {
  return observableVal
    .pipe(
      distinctUntilChanged(isEqual),
      tap(val => {
        const equal = isEqual(cachedValue, val);
        console.log('"output":', equal, cachedValue, val);
        cachedValue = val;
      })
    )
}
Run Code Online (Sandbox Code Playgroud)

在这个例子中,我希望函数const equal内部tap永远不会=== true. 我希望这distinctUntilChanged(isEqual)会过滤掉任何值,其中isEqual(cachedValue, val) === true-->const equal === false总是意味着。但是,控制台输出显示:

"output": false undefined [ContactList]
"output": true [ContactList] [ContactList]
"output": true [ContactList] [ContactList]
"output": true …
Run Code Online (Sandbox Code Playgroud)

rxjs lodash rxjs-pipeable-operators

9
推荐指数
1
解决办法
7765
查看次数