云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

企业网站_腾讯企业邮箱outlook_精选特惠

小七 141 0

RxJS公司RXJS6:有什么新的变化吗?RXJS6旨在为开发人员提供模块化改进、性能提升和更易于调试的调用堆栈。

RxJs 6推出了,并与它新的令人兴奋的增加和变化!benlesh强调了rxjs6带来了更干净的导入,同时有一个更小的API,一个可以在不改变代码的情况下更新的向后兼容性包,以及TypeScript的自动代码迁移。这些变化为开发人员提供了模块化的改进、性能的提升以及更容易调试的调用堆栈。RxJS团队在使这个版本尽可能向后兼容方面做了大量的工作。然而,为了减少RxJS库的API表面,引入了一些突破性的更改。rxjs6带来了模块化的改进,性能的提升,以及更容易调试的调用栈。RxJS团队在使这个版本尽可能向后兼容方面做了大量努力。"在推特上留言让我们来看看RxJS团队在这个新版本中包含和改变了什么。RxJS 6向后兼容性为了实现从rxjs5到rxjs6的迁移,RxJS团队发布了一个名为rxjscompat的兄弟包。这个包在v6和v5的api之间创建了一个兼容层。团队建议大多数开发人员通过在^6.0.0安装rxjs和rxjs compat来升级现有应用程序:npm安装rxjs@6rxjs兼容@6--保存此软件包允许您在实现rxjs6升级时继续运行现有的代码库而不会出现问题。它支持RXJS6版本中删除的功能。随着rxjs compat的安装,应用程序的捆绑包大小将增加;如果您的项目还与Webpack {return new Observable((subscriber)=>{这个。订阅({下一个(值){订阅服务器.next(值);},错误(err){订阅服务器.错误(错误);},完成(){订阅服务器完成(); },});});});源$.userDefined().subscribe();要编译以前的自定义运算符,需要进行以下更改:const userDefined=()=>(来源:Observable)=>new Observable(订户)=>{这个。订阅({下一个(值){订阅服务器.next(值);},错误(err){订阅服务器.错误(错误);},完成(){订阅服务器完成(); },});});});来源$.pipe(用户定义(),)同步错误处理打电话可观察的订阅不再支持try/catch块中的()。相反,将try/catch块替换为异步错误处理,并在可观察的订阅()方法。如发行说明所示://已弃用试试看{source$.subscribe(nextFn,未定义,completeFn);}接住(错误){手柄错误(err);}//改用source$.subscribe(nextFn,handleError,completeFn);可观察的订阅()现在必须定义一个错误回调来异步处理错误。删除RxJS兼容层之前要进行的更改如前所述,rxjscompat在v5和v6的api之间提供了一个临时兼容层。实际上,rxjs compat为您的代码库提供了它所依赖的v5的功能,允许您逐步将代码库升级到v6。要完成升级过程并从项目中删除rxjs compat依赖项,需要重构代码库以停止依赖v5功能,其中包括:对导入路径的更改TypeScript开发人员的建议是使用rxjstslint重构导入路径。RxJS团队设计了以下规则,以帮助JavaScript开发人员重构导入路径:包含XRJS、实用程序和方法。进口{可见的,主题,尽快安排,管道,的,从,间隔时间,合并,从事件}来自"rxjs";rxjs/operators:包含所有可管道化的运算符。{rjs,filter}从映射导入操作符;rxjs/webSocket:包含webSocket主题实现。从"rxjs/webSocket"导入{webSocket};rxjs/ajax:包含rxajax实现。从"rxjs/ajax"导入{ajax};rxjs/testing:包含rxjs的测试实用程序。从"rxjs/testing"导入{TestScheduler};使用管道而不是链条使用管道而不是链接作为新的运算符语法。一个运算符的结果通过管道传输到另一个运算符。在将所有链接运算符重构为管道运算符之前,不要删除rxjs compat。如果您是TypeScript用户,ts lint可以在某种程度上为类型良好的代码自动执行这种重构。在2018年ng conf期间,Ben Lesh解释了为什么我们应该使用管道运输机:按照以下步骤将操作链反应成管道:安装从rxjs/operators使用的所有运算符。注意,由于与JavaScript保留字的名称冲突,有些运算符的名称发生了更改!这些包括:do->tap,catch->catchError,switch->switchAll,finally->finalize。从"rxjs/operators"导入{map,filter,catchError,mergeMap};将一个pipe()方法附加到源,并将所有运算符包装在其中。确保。从每个运算符名称中删除,并且它们以逗号分隔。请记住,有些操作员需要更改其名称。以下是发行说明中的可管道重构示例://操作链来源.map(x=>x+x).mergeMap(n=>共(n+1,n+2).filter(x=>x%1==0).扫描((acc,x)=>acc+x,0)).catch(err=>of("找到错误")).subscribe(打印结果);//必须更新为管道流来源.管道(地图(x=>x+x),合并映射(n=>(n+1,n+2)管(过滤器(x=>x%1==0),扫描((acc,x)=>acc+x,0))),catchError(err=>of("error found"))).subscribe(打印结果);请注意,在上面的代码中我们如何使用pipe()两次,因为内部源也是通过管道传输的。使用函数而不是类函数已经取代了对观察值进行操作的类。所有可观察的类都被移除了。它们的功能被现有运算符、新运算符或函数所取代。它们的每个替换项都具有与每个类相同的功能。例如://已删除ArrayObservable.create(我的阵列)//改用发件人(myArray)//您也可以使用新运算符fromArray()。有关替换v5类的v6创建函数的完整列表,请访问RxJS文档。特殊情况:ConnectableObservable在v6中不直接使用。要访问它,请使用操作符multicast、publish、publishReplay、publishLast。SubscribeOnObservable在v6中被隐藏,不能直接使用。要访问它,请使用运算符subscribeOn。正在删除结果选择器结果选择器是一个RxJS特性,它没有被广泛使用,甚至在某些情况下甚至没有文档记录。然而,结果选择器确实使代码库膨胀了很多;因此,RxJS团队决定弃用或删除它们。对于使用结果选择器的开发人员,他们需要用外部结果选择代码替换resultSelector参数。对于first()和last()两个函数,这些参数已被删除,必须在删除rxjs compat之前进行更新。对于其他将resultSelector作为参数的函数(如映射运算符),此参数已被弃用,并且它们的实现已以更紧凑的形式重新编写。如果删除rxjs compat,这些函数将继续工作;但是,rxjs团队声明必须在v7发布之前删除它们。有关这个罕见实现的更多细节,请访问RxJS文档。其他RxJS 6不推荐可观察到以及可观察的投掷.可观察到已被iif()和可观察的投掷现在是throwError()。您可以使用rxjs tslint将这些不推荐使用的可观察方法调用转换为函数调用。发行说明为我们提供了以下示例:可观察到>iif()//已弃用可观察到(测试,a$,b$);//改用iif(测试,a$,b$);可见误差>投掷者错误()//已弃用可观察的投掷(新错误());//改用throwerError(new Error());不推荐的方法根据迁移指南,其他方法已被弃用和重构:合并从"rxjs/operators"导入{merge};a$.pipe(合并(b$,c$);//变成从"rxjs"导入{merge};合并(a$,b$,c$);海螺从"rxjs/operators"导入{concat};a$.pipe(concat(b$,c$);//变成从"rxjs"导入{concat};混凝土(a$、b$、c$);联合试验从"rxjs/operators"导入{combinelast};a$.pipe(组合测试(b$,c$);//变成从"rxjs"导入{combinelast};组合测试(a$,b$,c$);比赛{rjs}从"race"导入操作符;a$.pipe(座圈(b$,c$);//变成从"rxjs"导入{race};种族(a$,b$,c$);拉链从"rxjs/operators"导入{zip};a$.pipe(邮编(b$,c$);//变成从"rxjs"导入{zip};邮政编码(a$,b$,c$);扼要重述rxjs6带来了一些突破性的变化,但是通过添加允许y