我正在阅读关于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( ... )
..但我不确定为什么我被迫突然这样做。
答案 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 /运算符'中的导入,则可以继续使用旧语法。