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

Scaling up task processing with Celery
Scaling up task processing with CeleryScaling up task processing with Celery
Scaling up task processing with CeleryNicolas Grasset
 
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―shinjiigarashi
 
ちいさなオブジェクトでドメインモデルを組み立てる
ちいさなオブジェクトでドメインモデルを組み立てるちいさなオブジェクトでドメインモデルを組み立てる
ちいさなオブジェクトでドメインモデルを組み立てる増田 亨
 
大型 Web Application 轉移到 微服務的經驗分享
大型 Web Application 轉移到微服務的經驗分享大型 Web Application 轉移到微服務的經驗分享
大型 Web Application 轉移到 微服務的經驗分享Andrew Wu
 
[PHP 也有 Day #64] PHP 升級指南
[PHP 也有 Day #64] PHP 升級指南[PHP 也有 Day #64] PHP 升級指南
[PHP 也有 Day #64] PHP 升級指南Shengyou Fan
 
Goの時刻に関するテスト
Goの時刻に関するテストGoの時刻に関するテスト
Goの時刻に関するテストKentaro Kawano
 
D3.jsで日本地図を描いてみた
D3.jsで日本地図を描いてみたD3.jsで日本地図を描いてみた
D3.jsで日本地図を描いてみたmapquestIwasaki
 
オブジェクト指向できていますか?
オブジェクト指向できていますか?オブジェクト指向できていますか?
オブジェクト指向できていますか?Moriharu Ohzu
 
入門ClojureScript
入門ClojureScript入門ClojureScript
入門ClojureScriptsohta
 
すごい配列楽しく学ぼう
すごい配列楽しく学ぼうすごい配列楽しく学ぼう
すごい配列楽しく学ぼうxenophobia__
 
ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装infinite_loop
 
RxSwift 활용하기 - Let'Swift 2017
RxSwift 활용하기 - Let'Swift 2017RxSwift 활용하기 - Let'Swift 2017
RxSwift 활용하기 - Let'Swift 2017Wanbok Choi
 
자바에서 null을 안전하게 다루는 방법
자바에서 null을 안전하게 다루는 방법자바에서 null을 안전하게 다루는 방법
자바에서 null을 안전하게 다루는 방법Sungchul Park
 
Domain Driven Design with the F# type System -- F#unctional Londoners 2014
Domain Driven Design with the F# type System -- F#unctional Londoners 2014Domain Driven Design with the F# type System -- F#unctional Londoners 2014
Domain Driven Design with the F# type System -- F#unctional Londoners 2014Scott Wlaschin
 
[JCConf 2022] Compose for Desktop - 開發桌面軟體的新選擇
[JCConf 2022] Compose for Desktop - 開發桌面軟體的新選擇[JCConf 2022] Compose for Desktop - 開發桌面軟體的新選擇
[JCConf 2022] Compose for Desktop - 開發桌面軟體的新選擇Shengyou Fan
 
Elixirと他言語の比較的紹介 ver.2
Elixirと他言語の比較的紹介ver.2Elixirと他言語の比較的紹介ver.2
Elixirと他言語の比較的紹介 ver.2Tsunenori Oohara
 
SQLアンチパターン - ジェイウォーク
SQLアンチパターン - ジェイウォークSQLアンチパターン - ジェイウォーク
SQLアンチパターン - ジェイウォークke-m kamekoopa
 
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)Takuto Wada
 

What's hot (20)

Scaling up task processing with Celery
Scaling up task processing with CeleryScaling up task processing with Celery
Scaling up task processing with Celery
 
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
 
Photonのサービス選択の勘どころ
Photonのサービス選択の勘どころPhotonのサービス選択の勘どころ
Photonのサービス選択の勘どころ
 
ちいさなオブジェクトでドメインモデルを組み立てる
ちいさなオブジェクトでドメインモデルを組み立てるちいさなオブジェクトでドメインモデルを組み立てる
ちいさなオブジェクトでドメインモデルを組み立てる
 
大型 Web Application 轉移到 微服務的經驗分享
大型 Web Application 轉移到微服務的經驗分享大型 Web Application 轉移到微服務的經驗分享
大型 Web Application 轉移到 微服務的經驗分享
 
[PHP 也有 Day #64] PHP 升級指南
[PHP 也有 Day #64] PHP 升級指南[PHP 也有 Day #64] PHP 升級指南
[PHP 也有 Day #64] PHP 升級指南
 
Goの時刻に関するテスト
Goの時刻に関するテストGoの時刻に関するテスト
Goの時刻に関するテスト
 
D3.jsで日本地図を描いてみた
D3.jsで日本地図を描いてみたD3.jsで日本地図を描いてみた
D3.jsで日本地図を描いてみた
 
オブジェクト指向できていますか?
オブジェクト指向できていますか?オブジェクト指向できていますか?
オブジェクト指向できていますか?
 
入門ClojureScript
入門ClojureScript入門ClojureScript
入門ClojureScript
 
すごい配列楽しく学ぼう
すごい配列楽しく学ぼうすごい配列楽しく学ぼう
すごい配列楽しく学ぼう
 
ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装
 
RxSwift 활용하기 - Let'Swift 2017
RxSwift 활용하기 - Let'Swift 2017RxSwift 활용하기 - Let'Swift 2017
RxSwift 활용하기 - Let'Swift 2017
 
nginx入門
nginx入門nginx入門
nginx入門
 
자바에서 null을 안전하게 다루는 방법
자바에서 null을 안전하게 다루는 방법자바에서 null을 안전하게 다루는 방법
자바에서 null을 안전하게 다루는 방법
 
Domain Driven Design with the F# type System -- F#unctional Londoners 2014
Domain Driven Design with the F# type System -- F#unctional Londoners 2014Domain Driven Design with the F# type System -- F#unctional Londoners 2014
Domain Driven Design with the F# type System -- F#unctional Londoners 2014
 
[JCConf 2022] Compose for Desktop - 開發桌面軟體的新選擇
[JCConf 2022] Compose for Desktop - 開發桌面軟體的新選擇[JCConf 2022] Compose for Desktop - 開發桌面軟體的新選擇
[JCConf 2022] Compose for Desktop - 開發桌面軟體的新選擇
 
Elixirと他言語の比較的紹介 ver.2
Elixirと他言語の比較的紹介ver.2Elixirと他言語の比較的紹介ver.2
Elixirと他言語の比較的紹介 ver.2
 
SQLアンチパターン - ジェイウォーク
SQLアンチパターン - ジェイウォークSQLアンチパターン - ジェイウォーク
SQLアンチパターン - ジェイウォーク
 
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
 

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 聯絡資訊