详细解释Angular2中可观察的编程对象
序
RxJs的核心是可观测对象(Observable Object),它利用可观测数据序列实现异步和事件相结合的编程。与这个异步编程模型类似的是Promise,它是一个基于状态变化的异步模型。等待状态一旦进入成功或失败状态,就不能再修改。当状态改变时,订阅者只能获得一个值;可观察是一种基于序列的异步编程模型。随着序列的变化,用户可以不断获得新的值。而且Promise只提供了回复机制,没有更多的操作来支持结果的复杂处理,而Observable提供了各种操作符来处理操作结果,以满足复杂的应用逻辑。
在实际编程中,我们主要处理三个对象:可观察对象、观察对象和订阅对象:
以元素的点击事件为例,看看如何使用Observable:
var点击流=新接收。可观察的(observer={ var handle=evt=observer . next(evt);element . addeventlistener(' click ',handle);return()=element . removeeventlistener(' click ',handle);});subscription=点击流. subscribe(evt={ console . log(' onnext : ' evt . id);},err={ console . error(' OnError ');},()={ console . log(' on complete ');});setTimeout(()={ subscription . unsubscribe();}, 1000);如果每个事件都需要这样包装,岂不是太麻烦了,所以RxJs为我们提供了一个方便的函数:Observable.fromEvent,方便连接事件。
常见的链接运算符:concat、merge、combineLates等。
投影操作:需要强调地图、平面地图、平面地图
过滤器:过滤器,区分多种变化,
操作员分类:按类别划分的操作员
错误处理:捕获,重试,最后
解压缩:去抖、节流、采样、可暂停
减少:缓冲,缓冲计数,缓冲时间
如果你想掌握可观测算子,你必须首先学会理解序列图:
箭头表示随时间变化的序列,例如,连续单击元素上的鼠标,圆圈表示序列的外部影响。比如每次点击一个元素,就会触发一个事件回调,圆圈里的数字就是传递给外界的信息。例如,每次触发一个事件,都会有一个事件对象表示这个操作的一些信息。
如果你想灵活地使用Observable来处理复杂的逻辑,你必须学会使用它提供的运算符。我把运算符分为两类,单序列运算和复合序列运算。单序列操作是指一个序列操作,复合序列操作是指两个或两个以上的序列操作符。复合序列运算相对更难理解。
先看单序列运算,以map运算为例:
地图操作是将每次传输到外部的信息按顺序进行转换。如上所示,映射将传输值乘以10,因此每次订户订阅后获得的订阅值不再是原始的123,而是转换后的10 20 30。通过序列图理解可观察操作更方便。
让我们看一个复合序列操作,以合并为例
合并操作的目的是将两个独立的序列合并成一个序列。随着时间的推移,原序列1以100毫秒发射A,以200毫秒发射B,以300毫秒发射C,其用户将在400毫秒接收abc的三个值;序列2以150毫秒发射d,以250毫秒发射e,以350毫秒发射f,其用户在400毫秒内接收到三个def值。合并后的新序列将在400ms内收到abcdef(注意序列)。
对常用运算符的理解:
可观察的范围:传送一定数量值的序列。
当序列完成时,Observable.toArray:将所有传输的值转换为一个数组。
Observable.flatMap:将原始序列流中的元素转换成新的序列流,并将新的序列流合并到原始序列中元素的位置。
它设置可观察序列的第一个值
Observable.combineLatest:类似于promiseAll,在所有序列都有结果之前不会执行
Observable.scan:聚合序列中每次传输的值。类似于reduce,reduce聚合整个序列的值,并在序列完成时发送最终值
Observable.sample:从连续序列中获得某个样本
可观察的。合并:将多个序列合并成一个,可以用作或
Observable.timestamp:可以得到每个传输值的传输时间
可观察到。distincttuntilchanged(比较,选择器):选择器取出用于比较的键,比较用于比较两个键
当参数为false时,可观察的. takeWhile()停止传输数据
摘要
以上就是本文的全部内容。希望本文的内容能给你的学习或工作带来一些帮助。有问题可以留言交流。
版权声明:详细解释Angular2中可观察的编程对象是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。