您好,登錄后才能下訂單哦!
本篇內容主要講解“Node.js中怎么應用反應式編程”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Node.js中怎么應用反應式編程”吧!
反應式編程提供了先進的數據流,能夠以一種可預測的方式創建和操作事件流。
簡而言之,當輸入的變化導致輸出的相應變化,而不需要手動更新輸出的變化時,就可以說一個程序是反應式的。這使得軟件工程師可以繞過手動處理巨大實現的壓力。
功能性的反應式編程范式使我們的反應式代碼庫很容易被閱讀和理解,因為它減少了回調地獄,這使得異步的代碼塊難以閱讀。
由于反應式編程與異步操作有很大關系,函數式方法使我們更容易確定異步操作的結果。
操作符是Observables嚴重依賴的方法。它們有以下使用情況。
在處理異步請求時,將異步事件轉換為Observables
將多個可觀察變量的序列組合成一個單一的可觀察變量
錯誤處理
處理基于時間的操作
可觀察操作符包括[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)
方法,等等。
一個Observable流是一個由多個輸入值組成的數組,它隨著時間的推移被處理。一個Observable流向它的訂閱者發出事件,而訂閱者又聽從這些事件進行進一步處理。可觀察的流可以被組合來創建新的流。數組方法,如map
,reduce
,filter
,等等,都是用來操作流的。
值可以按以下方式發射給訂閱者。
import { of, Observable } from "rxjs"; const emitter : Observable<string> = of("Sam", "Ray", "Thomas");
Observable訂閱器更像是數組迭代器。它們在產生的Observable流中循環,使之有可能轉換或處理每個流。
下面的片段展示了如何訂閱一個Observable流。
emitter.subscribe((value: string) => { console.log(`Name: ${value}`) })
反應式編程有一些內置的訂閱方法,如emit
和flatMap
map方法,這些方法允許我們監聽Observable流的每個值,并根據我們的需要對它們進行處理。
一個完全反應式的Node.js系統應該滿足以下標準。
一個反應式系統應該擁有良好的用戶體驗,對用戶的互動提供及時的響應。
彈性架構,如果正確實施,將允許系統響應錯誤而不破壞整個系統。
這種架構確保每個節點都有一個復制品。如果主節點發生故障,在其他可用的節點上會有某種回退。
系統應該能夠處理不同的負載,這與它的能力有關,當基礎設施需要很少或沒有資源時,它可以縮小規模,而當基礎設施需要更多資源時,它可以擴大規模,以便提供一個有效的成本管理策略。
此外,該系統也應該能夠處理時間點的負載。
現在我們已經簡要地討論了反應式編程的基本原理,了解考慮用Node.js進行編程的反應式方法的原因也很重要。
編寫功能性的反應式代碼可以更容易地管理代碼庫,提高項目的可擴展性。
對于需要定期修改功能或增加新功能的項目來說,編寫功能性反應式代碼使得新功能更容易被添加到現有項目中。
在對外部API進行異步請求時,我們確實會遇到一些時間限制的約束。這些限制可以用反應式編程方法有效地處理。
實施反應式編程范式將極大地減少實現特定功能所需的代碼量。
在反應式編程誕生之前,用Node.js構建微服務需要協調所有服務互動的協調器模式。
協調器模式的一個典型用例是在電子商務應用中擁有微服務,這些微服務按順序處理以下任務:從購物車中獲取客戶訂單,計算總金額,生成賬單,在成功付款后,更新產品庫存并創建一個訂單ID,并向賣家提供Pending
。
雖然這提供了一個系統的方法來處理應用程序的邏輯流程,但依賴關系緊密耦合的一個主要缺點會破壞整個系統。例如,如果前面的服務出現故障,那么所有的依賴服務都不會被執行。
反應式編程不是一個萬能的方法,但它在一些特定的情況下是非常合適的。
當需要將應用流分散到可管理的微服務中時,反應式編程模式是非常合適的。
當需要在有限的時間內將應用交付給生產時
當前面的一個依賴性的臨時關閉會導致整個系統的崩潰時
當有很多異步的代碼塊,而等待的結果可能被延遲時,反應式編程也是非常合適的。
雖然功能化的反應式編程方法減少了協調器模式遇到的缺點,但它不能取代協調器模式,因為它有自己的缺點。
分解應用流程并分布在所有服務中所產生的冗余代碼塊
為了構建反應式服務,需要對流和事件循環有一個全面的了解
這是JavaScript中最流行的反應式編程庫之一,被積極維護。
在寫這篇文章的時候,RxJS正在從v7過渡到v8,它在上周有超過2700萬次的下載。這次過渡的特點是重寫了庫的性能,更好的模塊化,更好的可調試的調用堆棧,以及向后的兼容性。
下面是一個快速的RxJS使用例子。
import { range } from "rxjs"; import { map, filter } from "rxjs/operators"; range(1, 200) .pipe( filter(result => result % 2 === 1), map(result => result * 2 ) ) .subscribe(result => console.log(result));
Reactor.js是另一個用于反應式編程的JavaScript庫。雖然與Bacon.js和Rxjs相比,它還不是很流行,但它以輕量而聞名。使用Reactor.js在復雜的數據模型中保持一致性要容易得多,因為它能自動跟蹤反應式變量,并在任何反應式變量的值發生變化時重新觸發觀察者。
使用Reactor.js,不需要手動設置訂閱/監聽器,因為依賴關系會自動為你設置。
下面是一個Reactor.js使用的快速例子。
const reactor = new Reactor({ name: "Doe" }); observe(() => { console.log("My name is ", reactor.name); }); // prints "My name is Doe" reactor.name = "John "; // prints "My name is John"
Reactor是基于與Bacon.js和Knockout.js相同的反應式原理。
其他用于反應式編程的JavaScript庫包括。
Flyd
Bacon.js
Knockout.js
Kefir
大多數
到此,相信大家對“Node.js中怎么應用反應式編程”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。