Observables 顧名思義,是可以被觀察的事務(wù)。在 Rxjs 的上下文里,Observable 會隨著時間的推移,在某個時間點(diǎn)產(chǎn)生數(shù)據(jù)。 Observables 可以:
Observable 是一種異步事件的實(shí)現(xiàn)利器,例如單個操作(HTTP 請求)或多個可重復(fù)的操作(例如光標(biāo)移動或按鍵)。 響應(yīng)式編程(Reactive Programming)是一種構(gòu)建應(yīng)用程序的方法,它對應(yīng)用程序內(nèi)發(fā)生的變化做出響應(yīng),而不是編寫應(yīng)用程序來處理這些變化。后者是 Imperative Programming 即命令式編程的典型特征。 要理解 Observable 的設(shè)計(jì)原理,我們首先有必要了解典型的生產(chǎn)者和消費(fèi)者通信的幾種模式。 拉取(Pull)和推送(Push)模型定義了數(shù)據(jù)生產(chǎn)者如何與數(shù)據(jù)消費(fèi)者合作。 Pull拉?。涸诶∧P偷那闆r下,消費(fèi)者決定何時使用或請求數(shù)據(jù)。 當(dāng)我們創(chuàng)建一個返回值的函數(shù)時,該函數(shù)就是生產(chǎn)者。 但是,在調(diào)用該函數(shù)(或要求提供數(shù)據(jù))之前,該函數(shù)不會產(chǎn)生任何內(nèi)容。 調(diào)用函數(shù)的代碼是消費(fèi)者。 此調(diào)用按照消費(fèi)者的需求被觸發(fā)。 消費(fèi)者決定傳播策略。 Push推送:生產(chǎn)者主導(dǎo)推模型。 任何使用數(shù)據(jù)的人都不知道數(shù)據(jù)何時到達(dá)。 他們知道數(shù)據(jù)到達(dá)時要做的應(yīng)用邏輯,但消費(fèi)者不決定數(shù)據(jù)何時到達(dá)。 Promise 是推送模型的經(jīng)典示例。 當(dāng)任務(wù)完成時,promise 會產(chǎn)生數(shù)據(jù)或錯誤。 傳遞給 Promise 的回調(diào)函數(shù)永遠(yuǎn)不會知道 Promise 何時完成,它只負(fù)責(zé)數(shù)據(jù)成功達(dá)到或者發(fā)生錯誤時,應(yīng)該執(zhí)行什么樣的邏輯。 |
|