RxJS 5.5.6版本中zip操作符无法使用pipe方法?
解决RxJS 5.5.6中zip无pipe方法的问题
这个问题是RxJS 5.5版本引入的pipeable操作符机制导致的——从这个版本开始,官方不再推荐使用原型补丁(就是你之前用的import 'rxjs/add/xxx'这种方式),转而鼓励使用pipeable操作符来组合数据流逻辑,这也是为了优化打包体积、避免全局原型污染。
具体修改步骤:
替换导入语句
删掉所有import 'rxjs/add/observable/xxx'和import 'rxjs/add/operator/xxx'的补丁导入,换成显式导入需要的创建函数和pipeable操作符:// 导入创建Observable的核心函数(比如zip、timer) import { zip, timer } from 'rxjs/observable'; // 导入需要的pipeable操作符 import { skipWhile, first } from 'rxjs/operators';(注:部分项目配置也支持直接从
rxjs导入创建函数,比如import { zip, timer } from 'rxjs';,可根据实际情况调整)重构代码为pipe链式调用
原来的链式调用(.skipWhile().first())要改成通过pipe()方法组合操作符,因为RxJS 5.5+默认的Observable实例不再挂载这些操作符的原型方法(除非你手动导入补丁):zip( // 这里填入你原来的第一个Observable参数 ..., timer(0, intervalMS) ).pipe( skipWhile(f => f === undefined || f == 0), first() ).subscribe(...);
关于原型补丁的补充说明
如果你实在想暂时沿用旧写法,可以手动导入操作符的补丁来恢复原型方法:
import 'rxjs/add/operator/skipWhile'; import 'rxjs/add/operator/first';
但这种方式会把操作符挂载到所有Observable原型上,导致打包时包含不必要的代码,长期来看还是推荐切换到pipeable操作符的写法——这也是RxJS 6+的标准写法,能为后续版本升级做好准备。
内容的提问来源于stack exchange,提问作者Royi Namir
相关产品推荐
相关产品推荐

