本篇文章帶大家用Node.js探索一下反應(yīng)式編程,介紹一下在Node中應(yīng)用反應(yīng)式編程的方法,以及它的好處和利弊,希望對(duì)大家有所幫助!
反應(yīng)式編程提供了先進(jìn)的數(shù)據(jù)流,能夠以一種可預(yù)測(cè)的方式創(chuàng)建和操作事件流。
本文將告訴Node.js開發(fā)者如何在Node中應(yīng)用反應(yīng)式編程,以及它的好處和利弊。
本文將涉及以下內(nèi)容。
-
反應(yīng)式編程的基本原理
-
為什么考慮在Node.js中進(jìn)行反應(yīng)式編程?
-
何時(shí)使用反應(yīng)式編程方法
-
反應(yīng)式編程的好處
-
反應(yīng)式編程的弊端
-
介紹協(xié)調(diào)和它的好處/利弊
-
Node的反應(yīng)式編程庫
什么是反應(yīng)式編程?
簡(jiǎn)而言之,當(dāng)輸入的變化導(dǎo)致輸出的相應(yīng)變化,而不需要手動(dòng)更新輸出的變化時(shí),就可以說一個(gè)程序是反應(yīng)式的。這使得軟件工程師可以繞過手動(dòng)處理巨大實(shí)現(xiàn)的壓力。
功能性的反應(yīng)式編程范式使我們的反應(yīng)式代碼庫很容易被閱讀和理解,因?yàn)樗鼫p少了回調(diào)地獄,這使得異步的代碼塊難以閱讀。
由于反應(yīng)式編程與異步操作有很大關(guān)系,函數(shù)式方法使我們更容易確定異步操作的結(jié)果。
反應(yīng)式編程的基本原理
操作符
操作符是Observables嚴(yán)重依賴的方法。它們有以下使用情況。
- 在處理異步請(qǐng)求時(shí),將異步事件轉(zhuǎn)換為Observables
- 將多個(gè)可觀察變量的序列組合成一個(gè)單一的可觀察變量
- 錯(cuò)誤處理
- 處理基于時(shí)間的操作
可觀察操作符包括[filter(...)](https://rxjs.dev/api/operators/filter)
,[mergeMap(...)](https://rxjs.dev/api/operators/mergeMap)
,[of](https://rxjs.dev/api/index/function/of)
,[from](https://rxjs.dev/api/index/function/from)
,[concat](https://rxjs.dev/api/index/function/concat)
方法,等等。
可觀察流
一個(gè)Observable流是一個(gè)由多個(gè)輸入值組成的數(shù)組,它隨著時(shí)間的推移被處理。一個(gè)Observable流向它的訂閱者發(fā)出事件,而訂閱者又聽從這些事件進(jìn)行進(jìn)一步處理??捎^察的流可以被組合來創(chuàng)建新的流。數(shù)組方法,如map
,reduce
,filter
,等等,都是用來操作流的。
值可以按以下方式發(fā)射給訂閱者。
import { of, Observable } from "rxjs"; const emitter : Observable<string> = of("Sam", "Ray", "Thomas");
訂閱者
Observable訂閱器更像是數(shù)組迭代器。它們?cè)诋a(chǎn)生的Observable流中循環(huán),使之有可能轉(zhuǎn)換或處理每個(gè)流。
下面的片段展示了如何訂閱一個(gè)Observable流。
emitter.subscribe((value: string) => { console.log(`Name: ${value}`) })
反應(yīng)式編程有一些內(nèi)置的訂閱方法,如emit
和flatMap
map方法,這些方法允許我們監(jiān)聽Observable流的每個(gè)值,并根據(jù)我們的需要對(duì)它們進(jìn)行處理。
反應(yīng)式系統(tǒng)的標(biāo)準(zhǔn)
一個(gè)完全反應(yīng)式的Node.js系統(tǒng)應(yīng)該滿足以下標(biāo)準(zhǔn)。
響應(yīng)式架構(gòu)
一個(gè)反應(yīng)式系統(tǒng)應(yīng)該擁有良好的用戶體驗(yàn),對(duì)用戶的互動(dòng)提供及時(shí)的響應(yīng)。
彈性架構(gòu)
彈性架構(gòu),如果正確實(shí)施,將允許系統(tǒng)響應(yīng)錯(cuò)誤而不破壞整個(gè)系統(tǒng)。
這種架構(gòu)確保每個(gè)節(jié)點(diǎn)都有一個(gè)復(fù)制品。如果主節(jié)點(diǎn)發(fā)生故障,在其他可用的節(jié)點(diǎn)上會(huì)有某種回退。
可擴(kuò)展性
系統(tǒng)應(yīng)該能夠處理不同的負(fù)載,這與它的能力有關(guān),當(dāng)基礎(chǔ)設(shè)施需要很少或沒有資源時(shí),它可以縮小規(guī)模,而當(dāng)基礎(chǔ)設(shè)施需要