RxJS 5.5错误:take不是函数。链式函数问题

时间:2017-11-17 17:01:06

标签: javascript angular rxjs angular5

我正在阅读关于lettable/pipeable functions in RxJS的介绍,但它没有说明这对于链式方法来说可能是一个重大变化。这引起了我的一个scipts,它在升级后开始抛出错误:

let things = new BehaviorSubject<Thing[]>([]);
things.filter((things) => things.length > 0).take(1).subscribe( ... )
  

ERROR TypeError:tasks.filter(...)。take不是函数

有人可以解释/指出一篇文章解释为什么会这样吗?顺便说一句,修复是在take(1)函数中包装pipe()

things.filter((things) => things.length > 0).pipe(take(1)).subscribe( ... )

..但我不确定为什么我被迫突然这样做。

1 个答案:

答案 0 :(得分:2)

Angular 5支持RxJS 5.5,后者引入了 lettable运算符,这有助于树形抖动过程在应用程序捆绑期间删除未使用的代码。您可以从'rxjs / operators'导入运算符,然后将它们包装到一个带有可变数量参数的函数pipe()中,例如:

import { debounceTime, map} from 'rxjs/operators';
...
let keyupValue$ = keyup$
  .pipe(
     debounceTime(500),
     map(event => event['target'].value))
  .subscribe(val => this.doSomething(val));

我更喜欢旧语法。我不认为这是一个突破性的变化。如果您不使用'rxjs /运算符'中的导入,则可以继续使用旧语法。