rxjs學(xué)習筆記

針對異步數(shù)據(jù)流的編程刹淌,簡單來說官还,它將一切數(shù)據(jù)芹橡,包括HTTP請求,DOM事件或者普通數(shù)據(jù)等包裝成流的形式望伦,然后用強大豐富的操作符對流進行處理林说,使你得以同步方式處理異步數(shù)據(jù),并組合不同的操作符來輕松優(yōu)雅的實現(xiàn)你所需要的功能

學(xué)習

https://rxjs.dev/guide/overview
可通過以上官網(wǎng)進行學(xué)習屯伞,還可F12進行聯(lián)系測試

const { fromEvent } = rxjs;
const { mapTo } = rxjs.operators;

const clicks = fromEvent(document, 'click');
const greetings = clicks.pipe(mapTo('Hi'));
greetings.subscribe(x => console.log(x));

概念

Observable

observable 被稱為可觀察的序列腿箩,簡單來說數(shù)據(jù)在observable中流動,可以使用各種operator對流進行處理

const observable = new Observable(subscriber => {
  subscriber.next(1);
  subscriber.next(2);
  subscriber.next(3);
  setTimeout(() => {
    subscriber.next(4);
    subscriber.complete();
  }, 1000);
});

Observer

觀察者劣摇,一個回調(diào)函數(shù)集合珠移,他知道如何去監(jiān)聽由observable提供的值,通過三個可選參數(shù)末融,監(jiān)聽Observable的行為:

  • 成功處理函數(shù) next剑梳,每次流發(fā)出值時調(diào)用該函數(shù)
  • 錯誤處理函數(shù) error,只有在發(fā)生錯誤時才調(diào)用該函數(shù)滑潘,此處理函數(shù)本身接收一個錯誤
  • 完成處理函數(shù) complete,僅當流完成時才調(diào)用該函數(shù)
    如下所示:
observable.subscribe(
  x => console.log('Observer got a next value: ' + x),
  err => console.error('Observer got an error: ' + err),
  () => console.log('Observer got a complete notification')
);

Operator

采用函數(shù)式編程風格的函數(shù)锨咙,使用如map, filter, concat, flatmap來處理集合

常用操作符

創(chuàng)建序列: of, from, fromEvent, fromPromise, ajax, throw

https://rxjs.dev/operator-decision-tree
如果不知如何創(chuàng)建序列语卤,可通過以上網(wǎng)址根據(jù)自己的需求得出參考

合并序列: forkJoin, merge, concat

const ob1 = Observable.ajax('api/1')
const ob2 = Observable.ajax('api/2')
const obs = [ob1, ob2]
// 串行
Observable.concat(...obs).subscribe(detail => console.log('每個請求都會觸發(fā)回調(diào)'))
// 并行
Observable.merge(...obs).subscribe(detail => console.log('每個請求都會觸發(fā)回調(diào)'))
// 并行,并且合并結(jié)果
Observable.forkJoin(...obs).subscribe(detailArray => console.log('觸發(fā)一次回調(diào)'))

操作符: map, filter, swirthMap, to Promise, catch, take Until, timeout, debounceTime, distinctUtilChanged, pluck

https://reactive.how/rxjs/, 可通過此網(wǎng)址學(xué)習操作符

應(yīng)用

  • 重試機制,遞增延時重試
import { timer, from } from "rxjs";
import { retryWhen, delayWhen, tap, scan } from 'rxjs/operators';
const MAX_RETRY = 10
const ATTEMPT_DELAY_FACTOR = 3000
const promise = Promise.reject('bad');
// const promise = Promise.resolve('success');
promise.pipe(
        retryWhen(errors => 
            {
                return errors.pipe(
                    scan((errCount, err) => {
                      if(errCount >= MAX_RETRY) {
                        throw new Error(err)
                      }
                      return errCount + 1
                    }, 0),
                    delayWhen((errCount) => timer(ATTEMPT_DELAY_FACTOR * errCount)),
                    tap((errCount) => console.log(`運行失敗,將進行第${errCount}次重試 ` ))
                )
            }
        )
    )
    .subscribe(
        // 監(jiān)聽數(shù)據(jù)流
        res => {},
        // 監(jiān)聽錯誤
        err => {
          console.log('error:', err)酪刀;
        },
        // 監(jiān)聽結(jié)束
        () => {
          console.log('運行成功');
        }
    )
  }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末粹舵,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子骂倘,更是在濱河造成了極大的恐慌眼滤,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件历涝,死亡現(xiàn)場離奇詭異诅需,居然都是意外死亡,警方通過查閱死者的電腦和手機荧库,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進店門堰塌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人分衫,你說我怎么就攤上這事场刑。” “怎么了蚪战?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵牵现,是天一觀的道長铐懊。 經(jīng)常有香客問我,道長瞎疼,這世上最難降的妖魔是什么科乎? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮丑慎,結(jié)果婚禮上喜喂,老公的妹妹穿的比我還像新娘。我一直安慰自己竿裂,他們只是感情好玉吁,可當我...
    茶點故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著腻异,像睡著了一般进副。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上悔常,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天影斑,我揣著相機與錄音,去河邊找鬼机打。 笑死矫户,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的残邀。 我是一名探鬼主播皆辽,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼芥挣!你這毒婦竟也來了驱闷?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤空免,失蹤者是張志新(化名)和其女友劉穎空另,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蹋砚,經(jīng)...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡扼菠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了坝咐。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片娇豫。...
    茶點故事閱讀 39,991評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖畅厢,靈堂內(nèi)的尸體忽然破棺而出冯痢,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布浦楣,位于F島的核電站袖肥,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏振劳。R本人自食惡果不足惜椎组,卻給世界環(huán)境...
    茶點故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望历恐。 院中可真熱鬧寸癌,春花似錦、人聲如沸弱贼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽吮旅。三九已至溪烤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間庇勃,已是汗流浹背檬嘀。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留责嚷,地道東北人鸳兽。 一個月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像罕拂,于是被迫代替她去往敵國和親贸铜。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,941評論 2 355