0%

rxjs 筆記

 

因為工作用 angular , 裡面有一狗票 rxjs 不得不學 , 搞到現在覺得比較像學 rxjs 不是 angular XD

pipe

pipe => 管線函數

如果有學過 sql 的子查詢應該會從裡面開始讀 , 而不是由上到下 , 讀起來其實有點累
正常用 js/ts 寫起來大概會長這樣 , 需要由內的 fq 開始讀 => 再拓展到外的 lasai

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
let str = 'gg'

function lasai(str){
return 'lasai' + str
}

function fq(str){
return 'fq' + str
}

let result = lasai(fq(str))
console.log(result)

//印出
//lasaifqgg

pipe 就是用來解決這種需要由內讀到外的問題 , 讓 code 由上到下閱讀

1
2
3
4
5
6
7
8
9
10
11
const source$ = new Subject()

let res$ = source$.pipe(
map(x => fq(x)),
map(x => lasai(x)),
)
res$.subscribe(x =>{
console.log(x)
})

source$.next(str)

tap

tap => 處理副作用函數 , 一般拿來印個 log 看現在做了啥 , 應該也可以搭個 dir or table 之類的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
const source$ = new Subject()

let res = source$.pipe(
tap(x => console.log('start ' + x)),
map(x => 'fq' + x),
tap(x => console.log('after fq ' + x)),
map(x => 'lasai' + x),
tap(x => console.log('after lasai ' + x)),
)
res.subscribe(x=>{
console.log(x)
})

source$.next(str)

of

最簡單把目前的咚咚轉 Observable 應該就是用 of or from 非 array 應該都會用 of

1
2
3
4
5
6
7
of('g' , 'gg' , 'ggg').subscribe( x => console.log(x))
//g
//gg
//ggg

of(['g' , 'gg' , 'ggg']).subscribe( x => console.log(x))
//['g' , 'gg' , 'ggg']

from

一樣可以用來轉換咚咚為 Observable , 是 array 應該都會用 from

1
2
3
4
from(['g' , 'gg' , 'ggg']).subscribe( x => console.log(x))
//g
//gg
//ggg

fromEvent

用來轉換 js event

1
2
3
4
5
6
let btn = document.getElementById('btn') as HTMLButtonElement

fromEvent(btn , 'click')
.subscribe(event => {
console.log(event)
})

range

產生範圍內的數字 , 不得不拿出無敵的 99 乘法表

1
2
3
4
5
6
7
8
9
10
let A$ = range(1, 9)
let B$ = range(1, 9)

A$.subscribe(x => {
console.log(`----${x}-----`)
B$.subscribe(y =>
console.log(`${x} * ${y} = ${x * y}`)
)
console.log('----------')
})

有用資源

關閉