SlideShare a Scribd company logo
1 of 39
透過觀察序列變化掌握非同步事件處理的利器
RxJS 6 新手入門
多奇數位創意有限公司
技術總監 黃保翕(Will 保哥)
https://blog.miniasp.com
簡介 RxJS
The ReactiveX library for JavaScript.
Reactive Extensions (Rx)
• Reactive Extensions (Rx)
- is a library for composing asynchronous and event-based programs using
observable sequences and LINQ-style query operators.
• ReactiveX
- is a combination of the best ideas from the Observer pattern, the Iterator
pattern, and Functional programming.
• Reactive Programming
- is programming with asynchronous data streams.
• Streams
- are cheap and ubiquitous, anything can be a stream.
- variables, user inputs, properties, caches, data structures, etc.
關於 ReactiveX 用到的設計樣式
• 實作了 觀察者模式 (Observer pattern)
- Design Patterns - Observer Pattern
- Observable - ECMAScript Stage 1 Draft (GitHub)
• 用到了 迭代器模式 ( Iterator pattern )
• 也用到 函式編程 與 集合 等設計樣式
- Functional reactive programming
- 前端工程研究:理解函式編程核心概念與如何進行 JavaScript 函式編程
• 主要目的
有效管理非同步環境下的事件資料!
4
什麼是 RxJS https://rxjs.dev
• 一組可用來處理 非同步 或 事件 的 JavaScript 函式庫
- 非同步
• AJAX / XHR ( XMLHttpRequest ) / fetch API
• Service Worker / Node Stream
• setTimeout / setInterval
• Promise
- 事件
• 各式 DOM 事件 ( click, dblclick, keyup, mousemove, … )
• CSS 動畫事件 ( CSS3 transitionEnd event )
• HTML5 Geolocation / WebSockets / Server Send Events
5
了解 RxJS 的核心概念
• Observable 可觀察的物件
- 代表一組未來即將產生的事件資料 ( 被觀察的物件 )
• Observer 觀察者物件
- 代表一個用來接收「觀察結果」的物件 ( 收到的就是事件資料 )
- 觀察者物件就是一個物件包含 3 個含有回呼函式的屬性 ( next , error , complete )
• Subscription 訂閱物件
- 代表正在執行 Observable/Observer 的執行個體 (可用來取消訂閱)
• Operators 運算子
- 必須擁有函數編程中所定義的 純函數 (pure functions) 特性 ( 沒有副作用的函式 )
- 主要用來處理一系列的事件資料集合
- 常見的運算子包含 map, filter, concat, flatMap , switchMap , …
• Subject 主體物件
- 如同 EventEmitter 一樣,主要用來廣播收到的事件資料給多位 Observer (觀察者)
• Schedulers 排程控制器
- 用來集中管理與調度多重事件之間的資料,以控制事件併發情況 (control concurrency)
RxJS 的版本差異
• RxJS 4
- https://github.com/Reactive-Extensions/RxJS
- 當初由 Microsoft 積極發展的專案,並與社群知名的開元開發者進行協作。
• RxJS 5
- https://github.com/ReactiveX/rxjs/tree/5.x
- 提供比前版 RxJS 更好的執行效能 ( 但 API 設計過於混亂 )
• RxJS 6 (Stable)
- https://github.com/ReactiveX/rxjs/tree/6.x
- 遵循 ECMAScript Observable 標準進行實作 (Observable Spec Proposal)
- 更清楚的 API 設計、更好的 tree-shaking 結果、更模組化的檔案結構
- 提供比前版 RxJS 更清楚的偵錯資訊 (more debuggable call stacks)
- Angular 6+ 採用 RxJS 6 最新版本!
7
RxJS 快速上手
RxJS: Getting Started
快速體驗 RxJS 的運作方式
• 開啟官網 https://rxjs.dev/
• 按下 F12 開啟開發者工具並切換到 Console 頁籤
• 執行以下程式碼
rxjs.interval(500)
.pipe(rxjs.operators.take(4))
.subscribe(console.log)
9
建立運算子 (Creation)
過濾運算子 (Filtering)
觀察者 (Observer)
回傳訂閱物件 (Subscription)
透過 ES2015 解構賦值的寫法
const { interval } = rxjs;
const { take } = rxjs.operators;
interval(500)
.pipe(take(4))
.subscribe(console.log)
10
透過 ESM (ES Module) 的寫法
import { interval } from 'rxjs';
import { take } from 'rxjs/operators';
interval(500)
.pipe(take(4))
.subscribe(console.log)
11
快速示範 RxJS 的運作方式
• 建立可觀察的 Observable 物件
var clicks$ = rxjs.fromEvent(document, 'click');
• 建立觀察者物件 ( Observer )
var observer = { next: (x) => console.log(x) };
• 建立訂閱物件 (訂閱 Observable 物件,並傳入 Observer 觀察者物件)
var subs$ = clicks$.subscribe(observer);
• 取消訂閱 Subscription 物件
subs$.unsubscribe();
12
(承上頁) 簡化 Observer 的寫法
• 建立可觀察的 Observable 物件
var clicks$ = rxjs.fromEvent(document, 'click');
• 建立訂閱物件 (訂閱 Observable 物件並自動建立觀察者物件)
var subs$ = clicks$.subscribe(x => console.log(x));
• 取消訂閱 Subscription 物件
subs$.unsubscribe();
13
示範 RxJS 如何透過運算子過濾資料
• 建立可觀察的 Observable 物件
var clicks$ = rxjs.fromEvent(document, 'click');
• 套用 filter 運算子
const { filter } = rxjs.operators;
clicks$ = clicks$.pipe(filter(x => x.clientX < 100));
• 建立訂閱物件 (訂閱 Observable 物件並自動建立觀察者物件)
var subs$ = clicks$.subscribe((x) => console.log(x));
• 取消訂閱 Subscription 物件
subs$.unsubscribe();
14
示範 RxJS 如何套用多個運算子
• 建立可觀察的 Observable 物件
var clicks$ = rxjs.fromEvent(document, 'click');
• 套用 filter 運算子 + 透過 take 運算子取得最多兩個結果
const { filter, take } = rxjs.operators;
clicks$ = clicks$.pipe(
filter(x => x.clientX < 100),
take(2)
);
• 建立訂閱物件 (訂閱 Observable 物件並自動建立觀察者物件)
var subs$ = clicks$.subscribe(x => console.log(x));
• 取消訂閱 Subscription 物件
subs$.unsubscribe();
15
示範 RxJS 主體物件 (Subject) 的用法
• 建立主體物件 ( Subject ) ( 之後要靠這個主體物件進行廣播 )
var subject = new rxjs.Subject();
• 建立可觀察的 Observable 物件
var clicks$ = rxjs.fromEvent(document, 'click');
• 設定最多取得兩個事件資料就將 Observable 物件設為完成
clicks$ = clicks$.pipe(take(2));
• 設定將 clicks$ 全部交由 subject 主體物件進行廣播
clicks$.subscribe(subject);
• 最後再由 subject 去建立 Observer 觀察者物件
var subs1$ = subject.subscribe((x) => console.log(x.clientX));
var subs2$ = subject.subscribe((x) => console.log(x.clientY));
• 取消訂閱 Subscription 物件
subs1$.unsubscribe(); subs2$.unsubscribe();
16
彈珠圖 (Marbles Diagram) - take
17
彈珠圖 (Marbles Diagram) - map
18
彈珠圖 (Marbles Diagram) - concat
19
互動式的彈珠圖 (Marbles Diagram)
20
http://rxmarbles.com/
>>> 畫面上的彈珠是可以拖曳移動的喔! <<<
動畫呈現的彈珠圖 (Marbles Diagram)
21
RxJS Explorer / Launchpad for RxJS
選擇一個 RxJS 運算子
Choose an operator
運算子的分類
• Operator Decision Tree (新版) / Choose an operator (舊版)
- 建立運算子 (Creation Operators)
- 轉換運算子 (Transformation Operators)
- 過濾運算子 (Filtering Operators)
- 組合運算子 (Combination Operators)
- 多播運算子 (Multicasting Operators)
- 錯誤處理運算子 (Error Handling Operators)
- 工具函式運算子 (Utility Operators)
- 條件式與布林運算子 (Conditional and Boolean Operators)
- 數學與彙總運算子 (Mathematical and Aggregate Operators)
23
建立運算子 (Creation Operators)
• 負責建立一個 Observable 物件
• 常用運算子
- from
- fromEvent
- fromEventPattern
- interval
- of
- range
- throwError
- timer
• 其他運算子
- ajax
- bindCallback
- bindNodeCallback
- defer
- empty
- generate
- iif
組合建立運算子 (Join Creation Operators)
• 可將多個 Observable 物件組合成一個 Observable 物件
• 常用運算子
- combineLatest
- concat
- forkJoin
- merge
25
• 其他運算子
- race
- zip
- partition
轉換運算子 (Transformation Operators)
• 負責將 Observable 傳入的資料轉換成另一種格式
• 常用運算子
- concatMap
- concatMapTo
- map
- mapTo
- mergeMap
- mergeMapTo
- switchMap
- switchMapTo
- pluck
• 其他運算子
- buffer
- bufferCount
- bufferTime
- bufferToggle
- bufferWhen
- exhaust
- exhaustMap
- expand
- groupBy
- mergeScan
- pairwise
- partition
- scan
- window
- windowCount
- windowTime
- windowToggle
- windowWhen
過濾運算子 (Filtering Operators)
• 負責將 Observable 傳入的資料過濾/篩選掉
• 常用運算子
- debounce
- debounceTime
- distinct
- filter
- first / last
- skip / take
- throttle
- throttleTime
• 其他運算子
- audit
- auditTime
- distinctUntilChanged
- distinctKey
- distinctUntilKeyChanged
- elementAt
- ignoreElements
- sample
- sampleTime
- single
- skipLast
- skipUntil
- skipWhile
- takeLast
- takeUntil
- takeWhile
組合運算子 (Join Operators)
• 負責組合多個 Observable
• 常用運算子
- combineAll
- concatAll
- mergeAll
- startWith
28
• 其他運算子
- exhaust
- withLatestFrom
多播運算子 (Multicasting Operators)
• 負責將 Observable 廣播給多位觀察者
• 常用運算子
- publish
- publishReplay
- share
29
• 其他運算子
- multicast
- publishBehavior
- publishLast
錯誤處理運算子 (Error Handling Operators)
• 負責處理 Observable 觀察過程中出現的例外錯誤
• 常用運算子
- catchError
- retry
- retryWhen
30
工具函式運算子 (Utility Operators)
• 負責提供 Observable 執行過程的工具函式
• 常用運算子
- tap
- delay
- materialize
- timeout
- timeoutWith
- toArray
31
• 其他運算子
- delayWhen
- dematerialize
- observeOn
- subscribeOn
- timeInterval
- timestamp
條件式與布林運算子 (Conditional and Boolean Operators)
• 負責計算特定條件並回傳布林值的運算子
• 常用運算子
- defaultIfEmpty
- every
- find
- findIndex
- isEmpty
32
數學與彙總運算子 (Mathematical and Aggregate Operators)
• 負責將 Observable 傳來的資料進行數學/彙總運算
• 常用運算子
- count
- max
- min
33
• 其他運算子
- reduce
下一版 RxJS v7 即將廢棄的 APIs
• Deprecations
- Scheduler 建議自行定義類別並實作 SchedulerLike 介面
- empty 建議改用 rxjs.EMPTY 常數
- never 建議改用 rxjs.NEVER 常數
- combineLatest 建議改用 rxjs.combineLatest
- concat 建議改用 rxjs.concat
- merge 建議改用 rxjs.merge
- partition 建議改用 rxjs.partition
- race 建議改用 rxjs.race
- zip 建議改用 rxjs.zip
- ObservableLike 建議改用 InteropObservable
- NotificationKind
RxJS 與 Angular 整合範例
Integration with RxJS and Angular
36
相關連結
• RxJS 官網
• RxJS API 文件
• RxJS 4 API 文件 (舊版文件官網)
• ReactiveX 官網
• 30 天精通 RxJS
• Launchpad for RxJS
• RxMarbles: Interactive diagrams of Rx Observables
37
The Will Will Web
網路世界的學習心得與技術分享
http://blog.miniasp.com/
Facebook
Will 保哥的技術交流中心
http://www.facebook.com/will.fans
Twitter
https://twitter.com/Will_Huang
38
聯絡資訊
THANK YOU!
Q&A

More Related Content

What's hot

9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...NTT DATA Technology & Innovation
 
MySQLの文字コード事情 2017春版
MySQLの文字コード事情 2017春版MySQLの文字コード事情 2017春版
MySQLの文字コード事情 2017春版Masahiro Tomita
 
Google borg と コンテナベース分散システムデザインパターン
Google borg と コンテナベース分散システムデザインパターンGoogle borg と コンテナベース分散システムデザインパターン
Google borg と コンテナベース分散システムデザインパターンktateish
 
進擊的前端工程師:今天就用 JSON Server 自己打造 API 吧!
進擊的前端工程師:今天就用 JSON Server 自己打造 API 吧!進擊的前端工程師:今天就用 JSON Server 自己打造 API 吧!
進擊的前端工程師:今天就用 JSON Server 自己打造 API 吧!Will Huang
 
PostgreSQLアンチパターン
PostgreSQLアンチパターンPostgreSQLアンチパターン
PostgreSQLアンチパターンSoudai Sone
 
型安全性入門
型安全性入門型安全性入門
型安全性入門Akinori Abe
 
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!Tetsutaro Watanabe
 
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」   ソフトウェアアーキテクチャのひとかけら「関心の分離」と「疎結合」   ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけらAtsushi Nakamura
 
Flumeを活用したAmebaにおける大規模ログ収集システム
Flumeを活用したAmebaにおける大規模ログ収集システムFlumeを活用したAmebaにおける大規模ログ収集システム
Flumeを活用したAmebaにおける大規模ログ収集システムSatoshi Iijima
 
KafkaとAWS Kinesisの比較
KafkaとAWS Kinesisの比較KafkaとAWS Kinesisの比較
KafkaとAWS Kinesisの比較Yoshiyasu SAEKI
 
Fluentdのお勧めシステム構成パターン
Fluentdのお勧めシステム構成パターンFluentdのお勧めシステム構成パターン
Fluentdのお勧めシステム構成パターンKentaro Yoshida
 
SmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテム
SmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテムSmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテム
SmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテムSmartNews, Inc.
 
忙しい人の5分で分かるMesos入門 - Mesos って何だ?
忙しい人の5分で分かるMesos入門 - Mesos って何だ?忙しい人の5分で分かるMesos入門 - Mesos って何だ?
忙しい人の5分で分かるMesos入門 - Mesos って何だ?Masahito Zembutsu
 
DNS移転失敗体験談
DNS移転失敗体験談DNS移転失敗体験談
DNS移転失敗体験談oheso tori
 
AWS Black Belt Techシリーズ Amazon SNS / Amazon SQS
AWS Black Belt Techシリーズ Amazon SNS / Amazon SQSAWS Black Belt Techシリーズ Amazon SNS / Amazon SQS
AWS Black Belt Techシリーズ Amazon SNS / Amazon SQSAmazon Web Services Japan
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Akihiro Suda
 
ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装infinite_loop
 

What's hot (20)

9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
 
MySQLの文字コード事情 2017春版
MySQLの文字コード事情 2017春版MySQLの文字コード事情 2017春版
MySQLの文字コード事情 2017春版
 
Google borg と コンテナベース分散システムデザインパターン
Google borg と コンテナベース分散システムデザインパターンGoogle borg と コンテナベース分散システムデザインパターン
Google borg と コンテナベース分散システムデザインパターン
 
進擊的前端工程師:今天就用 JSON Server 自己打造 API 吧!
進擊的前端工程師:今天就用 JSON Server 自己打造 API 吧!進擊的前端工程師:今天就用 JSON Server 自己打造 API 吧!
進擊的前端工程師:今天就用 JSON Server 自己打造 API 吧!
 
Railsで作るBFFの功罪
Railsで作るBFFの功罪Railsで作るBFFの功罪
Railsで作るBFFの功罪
 
PostgreSQLアンチパターン
PostgreSQLアンチパターンPostgreSQLアンチパターン
PostgreSQLアンチパターン
 
型安全性入門
型安全性入門型安全性入門
型安全性入門
 
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!
 
MongoDBの監視
MongoDBの監視MongoDBの監視
MongoDBの監視
 
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」   ソフトウェアアーキテクチャのひとかけら「関心の分離」と「疎結合」   ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
 
Flumeを活用したAmebaにおける大規模ログ収集システム
Flumeを活用したAmebaにおける大規模ログ収集システムFlumeを活用したAmebaにおける大規模ログ収集システム
Flumeを活用したAmebaにおける大規模ログ収集システム
 
JS7 JobScheduler プレビュー
JS7 JobScheduler プレビューJS7 JobScheduler プレビュー
JS7 JobScheduler プレビュー
 
KafkaとAWS Kinesisの比較
KafkaとAWS Kinesisの比較KafkaとAWS Kinesisの比較
KafkaとAWS Kinesisの比較
 
Fluentdのお勧めシステム構成パターン
Fluentdのお勧めシステム構成パターンFluentdのお勧めシステム構成パターン
Fluentdのお勧めシステム構成パターン
 
SmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテム
SmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテムSmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテム
SmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテム
 
忙しい人の5分で分かるMesos入門 - Mesos って何だ?
忙しい人の5分で分かるMesos入門 - Mesos って何だ?忙しい人の5分で分かるMesos入門 - Mesos って何だ?
忙しい人の5分で分かるMesos入門 - Mesos って何だ?
 
DNS移転失敗体験談
DNS移転失敗体験談DNS移転失敗体験談
DNS移転失敗体験談
 
AWS Black Belt Techシリーズ Amazon SNS / Amazon SQS
AWS Black Belt Techシリーズ Amazon SNS / Amazon SQSAWS Black Belt Techシリーズ Amazon SNS / Amazon SQS
AWS Black Belt Techシリーズ Amazon SNS / Amazon SQS
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装
 

Similar to RxJS 6 新手入門

纵览Loadrunner核心功能
纵览Loadrunner核心功能纵览Loadrunner核心功能
纵览Loadrunner核心功能beiyu95
 
Golang 高性能实战
Golang 高性能实战Golang 高性能实战
Golang 高性能实战rfyiamcool
 
Large-Scale Cluster Mangement & Kubernetes Under The Hood
Large-Scale Cluster Mangement & Kubernetes Under The HoodLarge-Scale Cluster Mangement & Kubernetes Under The Hood
Large-Scale Cluster Mangement & Kubernetes Under The HoodLei (Harry) Zhang
 
Javascript primer plus
Javascript primer plusJavascript primer plus
Javascript primer plusDongxu Yao
 
Redux+react js
Redux+react jsRedux+react js
Redux+react js國昭 張
 
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰Scourgen Hong
 
ASP.NET MVC 6 新功能探索
ASP.NET MVC 6 新功能探索ASP.NET MVC 6 新功能探索
ASP.NET MVC 6 新功能探索Will Huang
 
Elastic stack day-1
Elastic stack day-1Elastic stack day-1
Elastic stack day-1YI-CHING WU
 
Linux binary Exploitation - Basic knowledge
Linux binary Exploitation - Basic knowledgeLinux binary Exploitation - Basic knowledge
Linux binary Exploitation - Basic knowledgeAngel Boy
 
千呼萬喚始出來的 Java SE 7
千呼萬喚始出來的 Java SE 7千呼萬喚始出來的 Java SE 7
千呼萬喚始出來的 Java SE 7Justin Lin
 
線上埋碼資料收集實作
線上埋碼資料收集實作線上埋碼資料收集實作
線上埋碼資料收集實作FEG
 
分布式系统日志处理调研
分布式系统日志处理调研分布式系统日志处理调研
分布式系统日志处理调研klandor
 
Template mb-kao
Template mb-kaoTemplate mb-kao
Template mb-kaoxwcoder
 
Elastic Stack 最新动态
Elastic Stack 最新动态Elastic Stack 最新动态
Elastic Stack 最新动态Elasticsearch
 
MySQL自动切换设计与实现
MySQL自动切换设计与实现MySQL自动切换设计与实现
MySQL自动切换设计与实现orczhou
 
主库自动切换 V2.0
主库自动切换 V2.0主库自动切换 V2.0
主库自动切换 V2.0jinqing zhu
 
基于Lucene的站内搜索
基于Lucene的站内搜索基于Lucene的站内搜索
基于Lucene的站内搜索fulin tang
 
基于Lucene的站内搜索
基于Lucene的站内搜索基于Lucene的站内搜索
基于Lucene的站内搜索fulin tang
 
Beyond rails server
Beyond rails serverBeyond rails server
Beyond rails serverMichael Chen
 

Similar to RxJS 6 新手入門 (20)

纵览Loadrunner核心功能
纵览Loadrunner核心功能纵览Loadrunner核心功能
纵览Loadrunner核心功能
 
Golang 高性能实战
Golang 高性能实战Golang 高性能实战
Golang 高性能实战
 
Large-Scale Cluster Mangement & Kubernetes Under The Hood
Large-Scale Cluster Mangement & Kubernetes Under The HoodLarge-Scale Cluster Mangement & Kubernetes Under The Hood
Large-Scale Cluster Mangement & Kubernetes Under The Hood
 
Javascript primer plus
Javascript primer plusJavascript primer plus
Javascript primer plus
 
Redux+react js
Redux+react jsRedux+react js
Redux+react js
 
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
 
ASP.NET MVC 6 新功能探索
ASP.NET MVC 6 新功能探索ASP.NET MVC 6 新功能探索
ASP.NET MVC 6 新功能探索
 
Elastic stack day-1
Elastic stack day-1Elastic stack day-1
Elastic stack day-1
 
Linux binary Exploitation - Basic knowledge
Linux binary Exploitation - Basic knowledgeLinux binary Exploitation - Basic knowledge
Linux binary Exploitation - Basic knowledge
 
千呼萬喚始出來的 Java SE 7
千呼萬喚始出來的 Java SE 7千呼萬喚始出來的 Java SE 7
千呼萬喚始出來的 Java SE 7
 
線上埋碼資料收集實作
線上埋碼資料收集實作線上埋碼資料收集實作
線上埋碼資料收集實作
 
分布式系统日志处理调研
分布式系统日志处理调研分布式系统日志处理调研
分布式系统日志处理调研
 
Template mb-kao
Template mb-kaoTemplate mb-kao
Template mb-kao
 
Elastic Stack 最新动态
Elastic Stack 最新动态Elastic Stack 最新动态
Elastic Stack 最新动态
 
MySQL自动切换设计与实现
MySQL自动切换设计与实现MySQL自动切换设计与实现
MySQL自动切换设计与实现
 
主库自动切换 V2.0
主库自动切换 V2.0主库自动切换 V2.0
主库自动切换 V2.0
 
基于Lucene的站内搜索
基于Lucene的站内搜索基于Lucene的站内搜索
基于Lucene的站内搜索
 
基于Lucene的站内搜索
基于Lucene的站内搜索基于Lucene的站内搜索
基于Lucene的站内搜索
 
Beyond rails server
Beyond rails serverBeyond rails server
Beyond rails server
 
Portfolio
PortfolioPortfolio
Portfolio
 

More from Will Huang

深入理解 CVE-2022-24765 漏洞的攻擊與防護策略 (Git v2.35.2)
深入理解 CVE-2022-24765 漏洞的攻擊與防護策略 (Git v2.35.2)深入理解 CVE-2022-24765 漏洞的攻擊與防護策略 (Git v2.35.2)
深入理解 CVE-2022-24765 漏洞的攻擊與防護策略 (Git v2.35.2)Will Huang
 
從頭打造 C#、.NET 與 ASP.NET Core 開發環境
從頭打造 C#、.NET 與 ASP.NET Core 開發環境從頭打造 C#、.NET 與 ASP.NET Core 開發環境
從頭打造 C#、.NET 與 ASP.NET Core 開發環境Will Huang
 
ASP.NET Core 6.0 全新功能探索
ASP.NET Core 6.0 全新功能探索ASP.NET Core 6.0 全新功能探索
ASP.NET Core 6.0 全新功能探索Will Huang
 
你一定不能不知道的 Markdown 寫作技巧
你一定不能不知道的 Markdown 寫作技巧你一定不能不知道的 Markdown 寫作技巧
你一定不能不知道的 Markdown 寫作技巧Will Huang
 
使用 .NET 5 實現美股期貨的量化交易策略 (.NET Conf 2020)
使用 .NET 5 實現美股期貨的量化交易策略 (.NET Conf 2020)使用 .NET 5 實現美股期貨的量化交易策略 (.NET Conf 2020)
使用 .NET 5 實現美股期貨的量化交易策略 (.NET Conf 2020)Will Huang
 
實現 Angular, Docker 與 Kubernetes 持續部署 (NG+2020)
實現 Angular, Docker 與 Kubernetes 持續部署 (NG+2020)實現 Angular, Docker 與 Kubernetes 持續部署 (NG+2020)
實現 Angular, Docker 與 Kubernetes 持續部署 (NG+2020)Will Huang
 
從實戰經驗看到的 K8S 導入痛點
從實戰經驗看到的 K8S 導入痛點從實戰經驗看到的 K8S 導入痛點
從實戰經驗看到的 K8S 導入痛點Will Huang
 
极速 Angular 开发:效能调校技巧 (ngChina 2019)
极速 Angular 开发:效能调校技巧 (ngChina 2019)极速 Angular 开发:效能调校技巧 (ngChina 2019)
极速 Angular 开发:效能调校技巧 (ngChina 2019)Will Huang
 
你不可不知的 ASP.NET Core 3 全新功能探索 (.NET Conf 2019)
你不可不知的 ASP.NET Core 3 全新功能探索 (.NET Conf 2019)你不可不知的 ASP.NET Core 3 全新功能探索 (.NET Conf 2019)
你不可不知的 ASP.NET Core 3 全新功能探索 (.NET Conf 2019)Will Huang
 
Protractor: The Hacker way (NG-MY 2019)
Protractor: The Hacker way (NG-MY 2019)Protractor: The Hacker way (NG-MY 2019)
Protractor: The Hacker way (NG-MY 2019)Will Huang
 
邁向 Windows Server 應用程式現代化 (Windows Server Application Modernization)
邁向 Windows Server 應用程式現代化 (Windows Server Application Modernization)邁向 Windows Server 應用程式現代化 (Windows Server Application Modernization)
邁向 Windows Server 應用程式現代化 (Windows Server Application Modernization)Will Huang
 
Angular 开发技巧 (2018 ngChina 开发者大会)
Angular 开发技巧 (2018 ngChina 开发者大会)Angular 开发技巧 (2018 ngChina 开发者大会)
Angular 开发技巧 (2018 ngChina 开发者大会)Will Huang
 
Angular 7 全新功能探索 (Angular Taiwan 2018)
Angular 7 全新功能探索 (Angular Taiwan 2018)Angular 7 全新功能探索 (Angular Taiwan 2018)
Angular 7 全新功能探索 (Angular Taiwan 2018)Will Huang
 
利用.NET Core 與 Azure Kubernetes Service (AKS) 建立高彈性 Microservices (Azure TechDay)
利用.NET Core 與 Azure Kubernetes Service (AKS) 建立高彈性 Microservices (Azure TechDay)利用.NET Core 與 Azure Kubernetes Service (AKS) 建立高彈性 Microservices (Azure TechDay)
利用.NET Core 與 Azure Kubernetes Service (AKS) 建立高彈性 Microservices (Azure TechDay)Will Huang
 
AKS 與開發人員體驗 (Kubernetes 大講堂)
AKS 與開發人員體驗 (Kubernetes 大講堂)AKS 與開發人員體驗 (Kubernetes 大講堂)
AKS 與開發人員體驗 (Kubernetes 大講堂)Will Huang
 
使用 ASP.NET Blazor 開發 SPA 網頁應用程式 (.NET Conf 2018)
使用 ASP.NET Blazor 開發 SPA 網頁應用程式 (.NET Conf 2018)使用 ASP.NET Blazor 開發 SPA 網頁應用程式 (.NET Conf 2018)
使用 ASP.NET Blazor 開發 SPA 網頁應用程式 (.NET Conf 2018)Will Huang
 
全新 Windows Server 2019 容器技術 及邁向與 Kubernetes 整合之路 (Windows Server 高峰會)
全新 Windows Server 2019 容器技術及邁向與 Kubernetes 整合之路 (Windows Server 高峰會)全新 Windows Server 2019 容器技術及邁向與 Kubernetes 整合之路 (Windows Server 高峰會)
全新 Windows Server 2019 容器技術 及邁向與 Kubernetes 整合之路 (Windows Server 高峰會)Will Huang
 
使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)
使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)
使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)Will Huang
 
以敏捷架構打造美國軟體外包專案的經驗談
以敏捷架構打造美國軟體外包專案的經驗談以敏捷架構打造美國軟體外包專案的經驗談
以敏捷架構打造美國軟體外包專案的經驗談Will Huang
 
開發人員必須知道的 Kubernetes 核心技術 - Kubernetes Summit 2018
開發人員必須知道的 Kubernetes 核心技術 - Kubernetes Summit 2018開發人員必須知道的 Kubernetes 核心技術 - Kubernetes Summit 2018
開發人員必須知道的 Kubernetes 核心技術 - Kubernetes Summit 2018Will Huang
 

More from Will Huang (20)

深入理解 CVE-2022-24765 漏洞的攻擊與防護策略 (Git v2.35.2)
深入理解 CVE-2022-24765 漏洞的攻擊與防護策略 (Git v2.35.2)深入理解 CVE-2022-24765 漏洞的攻擊與防護策略 (Git v2.35.2)
深入理解 CVE-2022-24765 漏洞的攻擊與防護策略 (Git v2.35.2)
 
從頭打造 C#、.NET 與 ASP.NET Core 開發環境
從頭打造 C#、.NET 與 ASP.NET Core 開發環境從頭打造 C#、.NET 與 ASP.NET Core 開發環境
從頭打造 C#、.NET 與 ASP.NET Core 開發環境
 
ASP.NET Core 6.0 全新功能探索
ASP.NET Core 6.0 全新功能探索ASP.NET Core 6.0 全新功能探索
ASP.NET Core 6.0 全新功能探索
 
你一定不能不知道的 Markdown 寫作技巧
你一定不能不知道的 Markdown 寫作技巧你一定不能不知道的 Markdown 寫作技巧
你一定不能不知道的 Markdown 寫作技巧
 
使用 .NET 5 實現美股期貨的量化交易策略 (.NET Conf 2020)
使用 .NET 5 實現美股期貨的量化交易策略 (.NET Conf 2020)使用 .NET 5 實現美股期貨的量化交易策略 (.NET Conf 2020)
使用 .NET 5 實現美股期貨的量化交易策略 (.NET Conf 2020)
 
實現 Angular, Docker 與 Kubernetes 持續部署 (NG+2020)
實現 Angular, Docker 與 Kubernetes 持續部署 (NG+2020)實現 Angular, Docker 與 Kubernetes 持續部署 (NG+2020)
實現 Angular, Docker 與 Kubernetes 持續部署 (NG+2020)
 
從實戰經驗看到的 K8S 導入痛點
從實戰經驗看到的 K8S 導入痛點從實戰經驗看到的 K8S 導入痛點
從實戰經驗看到的 K8S 導入痛點
 
极速 Angular 开发:效能调校技巧 (ngChina 2019)
极速 Angular 开发:效能调校技巧 (ngChina 2019)极速 Angular 开发:效能调校技巧 (ngChina 2019)
极速 Angular 开发:效能调校技巧 (ngChina 2019)
 
你不可不知的 ASP.NET Core 3 全新功能探索 (.NET Conf 2019)
你不可不知的 ASP.NET Core 3 全新功能探索 (.NET Conf 2019)你不可不知的 ASP.NET Core 3 全新功能探索 (.NET Conf 2019)
你不可不知的 ASP.NET Core 3 全新功能探索 (.NET Conf 2019)
 
Protractor: The Hacker way (NG-MY 2019)
Protractor: The Hacker way (NG-MY 2019)Protractor: The Hacker way (NG-MY 2019)
Protractor: The Hacker way (NG-MY 2019)
 
邁向 Windows Server 應用程式現代化 (Windows Server Application Modernization)
邁向 Windows Server 應用程式現代化 (Windows Server Application Modernization)邁向 Windows Server 應用程式現代化 (Windows Server Application Modernization)
邁向 Windows Server 應用程式現代化 (Windows Server Application Modernization)
 
Angular 开发技巧 (2018 ngChina 开发者大会)
Angular 开发技巧 (2018 ngChina 开发者大会)Angular 开发技巧 (2018 ngChina 开发者大会)
Angular 开发技巧 (2018 ngChina 开发者大会)
 
Angular 7 全新功能探索 (Angular Taiwan 2018)
Angular 7 全新功能探索 (Angular Taiwan 2018)Angular 7 全新功能探索 (Angular Taiwan 2018)
Angular 7 全新功能探索 (Angular Taiwan 2018)
 
利用.NET Core 與 Azure Kubernetes Service (AKS) 建立高彈性 Microservices (Azure TechDay)
利用.NET Core 與 Azure Kubernetes Service (AKS) 建立高彈性 Microservices (Azure TechDay)利用.NET Core 與 Azure Kubernetes Service (AKS) 建立高彈性 Microservices (Azure TechDay)
利用.NET Core 與 Azure Kubernetes Service (AKS) 建立高彈性 Microservices (Azure TechDay)
 
AKS 與開發人員體驗 (Kubernetes 大講堂)
AKS 與開發人員體驗 (Kubernetes 大講堂)AKS 與開發人員體驗 (Kubernetes 大講堂)
AKS 與開發人員體驗 (Kubernetes 大講堂)
 
使用 ASP.NET Blazor 開發 SPA 網頁應用程式 (.NET Conf 2018)
使用 ASP.NET Blazor 開發 SPA 網頁應用程式 (.NET Conf 2018)使用 ASP.NET Blazor 開發 SPA 網頁應用程式 (.NET Conf 2018)
使用 ASP.NET Blazor 開發 SPA 網頁應用程式 (.NET Conf 2018)
 
全新 Windows Server 2019 容器技術 及邁向與 Kubernetes 整合之路 (Windows Server 高峰會)
全新 Windows Server 2019 容器技術及邁向與 Kubernetes 整合之路 (Windows Server 高峰會)全新 Windows Server 2019 容器技術及邁向與 Kubernetes 整合之路 (Windows Server 高峰會)
全新 Windows Server 2019 容器技術 及邁向與 Kubernetes 整合之路 (Windows Server 高峰會)
 
使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)
使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)
使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)
 
以敏捷架構打造美國軟體外包專案的經驗談
以敏捷架構打造美國軟體外包專案的經驗談以敏捷架構打造美國軟體外包專案的經驗談
以敏捷架構打造美國軟體外包專案的經驗談
 
開發人員必須知道的 Kubernetes 核心技術 - Kubernetes Summit 2018
開發人員必須知道的 Kubernetes 核心技術 - Kubernetes Summit 2018開發人員必須知道的 Kubernetes 核心技術 - Kubernetes Summit 2018
開發人員必須知道的 Kubernetes 核心技術 - Kubernetes Summit 2018
 

RxJS 6 新手入門

  • 2. 簡介 RxJS The ReactiveX library for JavaScript.
  • 3. Reactive Extensions (Rx) • Reactive Extensions (Rx) - is a library for composing asynchronous and event-based programs using observable sequences and LINQ-style query operators. • ReactiveX - is a combination of the best ideas from the Observer pattern, the Iterator pattern, and Functional programming. • Reactive Programming - is programming with asynchronous data streams. • Streams - are cheap and ubiquitous, anything can be a stream. - variables, user inputs, properties, caches, data structures, etc.
  • 4. 關於 ReactiveX 用到的設計樣式 • 實作了 觀察者模式 (Observer pattern) - Design Patterns - Observer Pattern - Observable - ECMAScript Stage 1 Draft (GitHub) • 用到了 迭代器模式 ( Iterator pattern ) • 也用到 函式編程 與 集合 等設計樣式 - Functional reactive programming - 前端工程研究:理解函式編程核心概念與如何進行 JavaScript 函式編程 • 主要目的 有效管理非同步環境下的事件資料! 4
  • 5. 什麼是 RxJS https://rxjs.dev • 一組可用來處理 非同步 或 事件 的 JavaScript 函式庫 - 非同步 • AJAX / XHR ( XMLHttpRequest ) / fetch API • Service Worker / Node Stream • setTimeout / setInterval • Promise - 事件 • 各式 DOM 事件 ( click, dblclick, keyup, mousemove, … ) • CSS 動畫事件 ( CSS3 transitionEnd event ) • HTML5 Geolocation / WebSockets / Server Send Events 5
  • 6. 了解 RxJS 的核心概念 • Observable 可觀察的物件 - 代表一組未來即將產生的事件資料 ( 被觀察的物件 ) • Observer 觀察者物件 - 代表一個用來接收「觀察結果」的物件 ( 收到的就是事件資料 ) - 觀察者物件就是一個物件包含 3 個含有回呼函式的屬性 ( next , error , complete ) • Subscription 訂閱物件 - 代表正在執行 Observable/Observer 的執行個體 (可用來取消訂閱) • Operators 運算子 - 必須擁有函數編程中所定義的 純函數 (pure functions) 特性 ( 沒有副作用的函式 ) - 主要用來處理一系列的事件資料集合 - 常見的運算子包含 map, filter, concat, flatMap , switchMap , … • Subject 主體物件 - 如同 EventEmitter 一樣,主要用來廣播收到的事件資料給多位 Observer (觀察者) • Schedulers 排程控制器 - 用來集中管理與調度多重事件之間的資料,以控制事件併發情況 (control concurrency)
  • 7. RxJS 的版本差異 • RxJS 4 - https://github.com/Reactive-Extensions/RxJS - 當初由 Microsoft 積極發展的專案,並與社群知名的開元開發者進行協作。 • RxJS 5 - https://github.com/ReactiveX/rxjs/tree/5.x - 提供比前版 RxJS 更好的執行效能 ( 但 API 設計過於混亂 ) • RxJS 6 (Stable) - https://github.com/ReactiveX/rxjs/tree/6.x - 遵循 ECMAScript Observable 標準進行實作 (Observable Spec Proposal) - 更清楚的 API 設計、更好的 tree-shaking 結果、更模組化的檔案結構 - 提供比前版 RxJS 更清楚的偵錯資訊 (more debuggable call stacks) - Angular 6+ 採用 RxJS 6 最新版本! 7
  • 9. 快速體驗 RxJS 的運作方式 • 開啟官網 https://rxjs.dev/ • 按下 F12 開啟開發者工具並切換到 Console 頁籤 • 執行以下程式碼 rxjs.interval(500) .pipe(rxjs.operators.take(4)) .subscribe(console.log) 9 建立運算子 (Creation) 過濾運算子 (Filtering) 觀察者 (Observer) 回傳訂閱物件 (Subscription)
  • 10. 透過 ES2015 解構賦值的寫法 const { interval } = rxjs; const { take } = rxjs.operators; interval(500) .pipe(take(4)) .subscribe(console.log) 10
  • 11. 透過 ESM (ES Module) 的寫法 import { interval } from 'rxjs'; import { take } from 'rxjs/operators'; interval(500) .pipe(take(4)) .subscribe(console.log) 11
  • 12. 快速示範 RxJS 的運作方式 • 建立可觀察的 Observable 物件 var clicks$ = rxjs.fromEvent(document, 'click'); • 建立觀察者物件 ( Observer ) var observer = { next: (x) => console.log(x) }; • 建立訂閱物件 (訂閱 Observable 物件,並傳入 Observer 觀察者物件) var subs$ = clicks$.subscribe(observer); • 取消訂閱 Subscription 物件 subs$.unsubscribe(); 12
  • 13. (承上頁) 簡化 Observer 的寫法 • 建立可觀察的 Observable 物件 var clicks$ = rxjs.fromEvent(document, 'click'); • 建立訂閱物件 (訂閱 Observable 物件並自動建立觀察者物件) var subs$ = clicks$.subscribe(x => console.log(x)); • 取消訂閱 Subscription 物件 subs$.unsubscribe(); 13
  • 14. 示範 RxJS 如何透過運算子過濾資料 • 建立可觀察的 Observable 物件 var clicks$ = rxjs.fromEvent(document, 'click'); • 套用 filter 運算子 const { filter } = rxjs.operators; clicks$ = clicks$.pipe(filter(x => x.clientX < 100)); • 建立訂閱物件 (訂閱 Observable 物件並自動建立觀察者物件) var subs$ = clicks$.subscribe((x) => console.log(x)); • 取消訂閱 Subscription 物件 subs$.unsubscribe(); 14
  • 15. 示範 RxJS 如何套用多個運算子 • 建立可觀察的 Observable 物件 var clicks$ = rxjs.fromEvent(document, 'click'); • 套用 filter 運算子 + 透過 take 運算子取得最多兩個結果 const { filter, take } = rxjs.operators; clicks$ = clicks$.pipe( filter(x => x.clientX < 100), take(2) ); • 建立訂閱物件 (訂閱 Observable 物件並自動建立觀察者物件) var subs$ = clicks$.subscribe(x => console.log(x)); • 取消訂閱 Subscription 物件 subs$.unsubscribe(); 15
  • 16. 示範 RxJS 主體物件 (Subject) 的用法 • 建立主體物件 ( Subject ) ( 之後要靠這個主體物件進行廣播 ) var subject = new rxjs.Subject(); • 建立可觀察的 Observable 物件 var clicks$ = rxjs.fromEvent(document, 'click'); • 設定最多取得兩個事件資料就將 Observable 物件設為完成 clicks$ = clicks$.pipe(take(2)); • 設定將 clicks$ 全部交由 subject 主體物件進行廣播 clicks$.subscribe(subject); • 最後再由 subject 去建立 Observer 觀察者物件 var subs1$ = subject.subscribe((x) => console.log(x.clientX)); var subs2$ = subject.subscribe((x) => console.log(x.clientY)); • 取消訂閱 Subscription 物件 subs1$.unsubscribe(); subs2$.unsubscribe(); 16
  • 20. 互動式的彈珠圖 (Marbles Diagram) 20 http://rxmarbles.com/ >>> 畫面上的彈珠是可以拖曳移動的喔! <<<
  • 21. 動畫呈現的彈珠圖 (Marbles Diagram) 21 RxJS Explorer / Launchpad for RxJS
  • 23. 運算子的分類 • Operator Decision Tree (新版) / Choose an operator (舊版) - 建立運算子 (Creation Operators) - 轉換運算子 (Transformation Operators) - 過濾運算子 (Filtering Operators) - 組合運算子 (Combination Operators) - 多播運算子 (Multicasting Operators) - 錯誤處理運算子 (Error Handling Operators) - 工具函式運算子 (Utility Operators) - 條件式與布林運算子 (Conditional and Boolean Operators) - 數學與彙總運算子 (Mathematical and Aggregate Operators) 23
  • 24. 建立運算子 (Creation Operators) • 負責建立一個 Observable 物件 • 常用運算子 - from - fromEvent - fromEventPattern - interval - of - range - throwError - timer • 其他運算子 - ajax - bindCallback - bindNodeCallback - defer - empty - generate - iif
  • 25. 組合建立運算子 (Join Creation Operators) • 可將多個 Observable 物件組合成一個 Observable 物件 • 常用運算子 - combineLatest - concat - forkJoin - merge 25 • 其他運算子 - race - zip - partition
  • 26. 轉換運算子 (Transformation Operators) • 負責將 Observable 傳入的資料轉換成另一種格式 • 常用運算子 - concatMap - concatMapTo - map - mapTo - mergeMap - mergeMapTo - switchMap - switchMapTo - pluck • 其他運算子 - buffer - bufferCount - bufferTime - bufferToggle - bufferWhen - exhaust - exhaustMap - expand - groupBy - mergeScan - pairwise - partition - scan - window - windowCount - windowTime - windowToggle - windowWhen
  • 27. 過濾運算子 (Filtering Operators) • 負責將 Observable 傳入的資料過濾/篩選掉 • 常用運算子 - debounce - debounceTime - distinct - filter - first / last - skip / take - throttle - throttleTime • 其他運算子 - audit - auditTime - distinctUntilChanged - distinctKey - distinctUntilKeyChanged - elementAt - ignoreElements - sample - sampleTime - single - skipLast - skipUntil - skipWhile - takeLast - takeUntil - takeWhile
  • 28. 組合運算子 (Join Operators) • 負責組合多個 Observable • 常用運算子 - combineAll - concatAll - mergeAll - startWith 28 • 其他運算子 - exhaust - withLatestFrom
  • 29. 多播運算子 (Multicasting Operators) • 負責將 Observable 廣播給多位觀察者 • 常用運算子 - publish - publishReplay - share 29 • 其他運算子 - multicast - publishBehavior - publishLast
  • 30. 錯誤處理運算子 (Error Handling Operators) • 負責處理 Observable 觀察過程中出現的例外錯誤 • 常用運算子 - catchError - retry - retryWhen 30
  • 31. 工具函式運算子 (Utility Operators) • 負責提供 Observable 執行過程的工具函式 • 常用運算子 - tap - delay - materialize - timeout - timeoutWith - toArray 31 • 其他運算子 - delayWhen - dematerialize - observeOn - subscribeOn - timeInterval - timestamp
  • 32. 條件式與布林運算子 (Conditional and Boolean Operators) • 負責計算特定條件並回傳布林值的運算子 • 常用運算子 - defaultIfEmpty - every - find - findIndex - isEmpty 32
  • 33. 數學與彙總運算子 (Mathematical and Aggregate Operators) • 負責將 Observable 傳來的資料進行數學/彙總運算 • 常用運算子 - count - max - min 33 • 其他運算子 - reduce
  • 34. 下一版 RxJS v7 即將廢棄的 APIs • Deprecations - Scheduler 建議自行定義類別並實作 SchedulerLike 介面 - empty 建議改用 rxjs.EMPTY 常數 - never 建議改用 rxjs.NEVER 常數 - combineLatest 建議改用 rxjs.combineLatest - concat 建議改用 rxjs.concat - merge 建議改用 rxjs.merge - partition 建議改用 rxjs.partition - race 建議改用 rxjs.race - zip 建議改用 rxjs.zip - ObservableLike 建議改用 InteropObservable - NotificationKind
  • 35. RxJS 與 Angular 整合範例 Integration with RxJS and Angular
  • 36. 36
  • 37. 相關連結 • RxJS 官網 • RxJS API 文件 • RxJS 4 API 文件 (舊版文件官網) • ReactiveX 官網 • 30 天精通 RxJS • Launchpad for RxJS • RxMarbles: Interactive diagrams of Rx Observables 37
  • 38. The Will Will Web 網路世界的學習心得與技術分享 http://blog.miniasp.com/ Facebook Will 保哥的技術交流中心 http://www.facebook.com/will.fans Twitter https://twitter.com/Will_Huang 38 聯絡資訊