亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

JavaScript中rxjs與?Observable?兩大類操作符解析

 更新時(shí)間:2022年07月01日 10:10:38   作者:??JerryWang_sap????  
這篇文章主要介紹了JavaScript中rxjs與?Observable?兩大類操作符解析,運(yùn)算符是對(duì)?Observable?進(jìn)行操作并返回?Observable?的函數(shù),文章圍繞主題展開詳細(xì)內(nèi)容,需要的小伙伴可以參考一下

前言

Observable 生產(chǎn)的數(shù)據(jù),應(yīng)該提供開發(fā)人員足夠的自由度,對(duì)這些數(shù)據(jù)進(jìn)行各種處理,比如 map / transform 等等。這就是 Rxjs Operator 大展身手的地方。

運(yùn)算符是對(duì) Observable 進(jìn)行操作并返回 Observable 的函數(shù)。 這允許我們鏈接這些運(yùn)算符。 鏈中的每個(gè)運(yùn)算符都會(huì)修改由前一個(gè)運(yùn)算符的運(yùn)算產(chǎn)生的 Observable。

鏈中的算子不會(huì)同時(shí)工作,而是按順序運(yùn)行,每個(gè)算子都在鏈中前一個(gè)算子生成的 Observable 上工作。

訂閱是使用 subscribe 運(yùn)算符完成的。 訂閱操作符允許觀察者連接 Observable。 觀察者要從 Observable 獲取數(shù)據(jù)或錯(cuò)誤,首先必須訂閱該 Observable。

Rxjs 里的 Operator 可以分為兩大類。

1. 可以加入到 pipe 鏈?zhǔn)讲僮鞯?Operator

可管道運(yùn)算符是可以鏈接在一起的運(yùn)算符。 這些是純函數(shù),它們將可觀察對(duì)象作為輸入并提供可觀察對(duì)象作為輸出。

偽代碼如下:

observeable.pipe(
  operator1(),
  operator2(),
  operator3(),
  operator3(),
)

operator1 將接收 observable,對(duì)其執(zhí)行操作并發(fā)出 observable。 從 operator1 發(fā)出的 observable 被傳遞給 operator2 作為輸入(通過其余的運(yùn)算符以此類推)。

filter、mergeMap 和 forkJoin 是可管道操作符的一些示例。

2. 創(chuàng)建型 Operator

創(chuàng)建操作符是創(chuàng)建新 Observable 的獨(dú)立函數(shù)。最典型的創(chuàng)建操作符就是 of:

import { of } from 'rxjs';
const observable = of(1, 2, 3);

變量 observable 是一個(gè) Observable 類型的實(shí)例,它將發(fā)出 1、2 和 3(按順序)。

create, of 和 from 是創(chuàng)建型操作符的典型例子。

3. 冷熱 Observable 的區(qū)別

Code Observable 在觀察者訂閱它之前不會(huì)開始發(fā)出值。

相反的,Hot Observable 可以隨時(shí)開始發(fā)出值,訂閱者可以隨時(shí)開始觀察發(fā)出的值。 但是,訂閱者可能會(huì)錯(cuò)過訂閱時(shí)間之前發(fā)出的任何值。

看個(gè)例子:

import { Observable } from 'rxjs';
const observable = Observable.create((observer: any) => {
  observer.next('Hello World!');
});
observable.subscribe((message) => console.log(message)); // Hello World!

這個(gè) Observable 發(fā)射的值就是 Hello World. 它會(huì)調(diào)用訂閱者的 next 方法進(jìn)行發(fā)射。

Observable.create 的輸入?yún)?shù)是一個(gè)訂閱者 subscriber. 這是一個(gè)函數(shù),函數(shù)的輸入?yún)?shù)是 Observer,類型為 any. 函數(shù)體為執(zhí)行該輸入?yún)?shù)的 next 方法。

Observable 的構(gòu)造函數(shù)很簡(jiǎn)單,就把 create 傳入的函數(shù),設(shè)置到 Observable 內(nèi)部屬性 _subscribe 里: 

然后針對(duì) Observable.create 返回的 Observable 實(shí)例,調(diào)用 subscribe 方法進(jìn)行訂閱。

訂閱者的邏輯通過 subscribe 方法傳入,是一個(gè)函數(shù): 

toSubscriber 方法會(huì)創(chuàng)建一個(gè)訂閱者 subscriber 實(shí)例: 

subscriber 的構(gòu)造函數(shù)里,就是簡(jiǎn)單的為 destination 字段賦值:

這里把 subscribe 函數(shù)傳入的應(yīng)用邏輯,賦給 safeSubscriber 的 _next 屬性: 

然后執(zhí)行 _subscribe 方法: 

這個(gè) _subscribe 方法就是 subscribe 函數(shù)調(diào)用第一步,把 subscribe 傳入的應(yīng)用邏輯賦給 _subscribe 屬性的那個(gè)函數(shù)。

注意,subscribe 函數(shù)調(diào)用,首先會(huì)觸發(fā) Observable 的 emit value: 

this._next 觸發(fā) destination.next:

這里調(diào)用 SafeSubscriber 的 _next 屬性指向的方法,即 subscribe 傳入的函數(shù)實(shí)現(xiàn):

總結(jié)一下,Observable.create 和 Observable.subscribe 這套調(diào)用, 首先會(huì)觸發(fā) Observable 實(shí)例調(diào)用 next 方法,發(fā)射調(diào)用創(chuàng)建操作符時(shí)指定的待發(fā)射值。接著會(huì)觸發(fā)應(yīng)用開發(fā)人員傳入 subscribe 調(diào)用的業(yè)務(wù)邏輯,消費(fèi)這個(gè)發(fā)射的值。

這段代碼執(zhí)行的先后順序如下: 

到此這篇關(guān)于JavaScript中rxjs與 Observable 兩大類操作符解析的文章就介紹到這了,更多相關(guān)JS rxjs與 Observable 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Bootstrap禁用響應(yīng)式布局的實(shí)現(xiàn)方法

    Bootstrap禁用響應(yīng)式布局的實(shí)現(xiàn)方法

    這篇文章主要介紹了Bootstrap禁用響應(yīng)式布局的實(shí)現(xiàn)方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-03-03
  • js實(shí)現(xiàn)數(shù)字每三位加逗號(hào)的方法

    js實(shí)現(xiàn)數(shù)字每三位加逗號(hào)的方法

    這篇文章主要介紹了js實(shí)現(xiàn)數(shù)字每三位加逗號(hào)的方法,以實(shí)例形式講述了js實(shí)現(xiàn)數(shù)字每三位加逗號(hào)的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-02-02
  • js使用Canvas將多張圖片合并成一張的實(shí)現(xiàn)代碼

    js使用Canvas將多張圖片合并成一張的實(shí)現(xiàn)代碼

    這篇文章主要介紹了js使用Canvas將多張圖片合并成一張的實(shí)現(xiàn)代碼,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04
  • JS常見加解密算法小結(jié)

    JS常見加解密算法小結(jié)

    在Web開發(fā)中,保護(hù)用戶數(shù)據(jù)是至關(guān)重要的,而對(duì)數(shù)據(jù)進(jìn)行加密是其中一種有效手段,本文將深入淺出地介紹常見的加解密算法,包括消息摘要算法、對(duì)稱加密算法以及非對(duì)稱加密算法,需要的朋友可以參考下
    2023-12-12
  • JS中類的靜態(tài)方法,靜態(tài)變量,實(shí)例方法,實(shí)例變量區(qū)別與用法實(shí)例分析

    JS中類的靜態(tài)方法,靜態(tài)變量,實(shí)例方法,實(shí)例變量區(qū)別與用法實(shí)例分析

    這篇文章主要介紹了JS中類的靜態(tài)方法,靜態(tài)變量,實(shí)例方法,實(shí)例變量區(qū)別與用法,結(jié)合實(shí)例形式詳細(xì)分析了JS中類的靜態(tài)方法,靜態(tài)變量,實(shí)例方法,實(shí)例變量相關(guān)功能、使用方法及操作注意事項(xiàng),需要的朋友可以參考下
    2020-03-03
  • js字符串去重復(fù)id的實(shí)現(xiàn)代碼

    js字符串去重復(fù)id的實(shí)現(xiàn)代碼

    最近由于需要我們將相關(guān)id的重復(fù)的去掉,一個(gè)是客戶端一個(gè)后臺(tái)程序把關(guān),這里分享下js的去重復(fù)id的實(shí)現(xiàn)代碼
    2013-07-07
  • escape、encodeURI 和 encodeURIComponent 的區(qū)別

    escape、encodeURI 和 encodeURIComponent 的區(qū)別

    escape(), encodeURI()和encodeURIComponent()是在Javascript中用于編碼字符串的三個(gè)常用的方法,而他們之間的異同卻困擾了很多的Javascript初學(xué)者,今天我就在這里對(duì)這三個(gè)方法詳細(xì)地分析與比較一下。
    2009-03-03
  • babel插件去除console示例詳解

    babel插件去除console示例詳解

    這篇文章主要為大家介紹了babel插件去除console示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • Webpack打包慢問題的完美解決方法

    Webpack打包慢問題的完美解決方法

    這篇文章主要給大家介紹了關(guān)于Webpack打包慢問題的完美解決方法,文中通過示例代碼介紹的非常詳細(xì),相信對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,需要的朋友們下面來一起看看吧。
    2017-03-03
  • Javascript 加載和執(zhí)行-性能提高篇

    Javascript 加載和執(zhí)行-性能提高篇

    Javascript 在瀏覽器中的性能問題,可能是最重要的可用性問題;Js的阻塞性 瀏覽器用單一進(jìn)程來處理UI進(jìn)程和Js的執(zhí)行;不管是內(nèi)嵌的還是外鏈的,下載并立即執(zhí)行 因?yàn)樗锌赡軙?huì)修改頁(yè)面
    2012-12-12

最新評(píng)論