国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

rxjs簡(jiǎn)介

cnsworder / 1520人閱讀

摘要:類(lèi)似于函數(shù)聲明類(lèi)似于函數(shù)調(diào)用類(lèi)似于調(diào)用時(shí)傳入回調(diào)函數(shù)對(duì)象來(lái)執(zhí)行執(zhí)行后的返回值稱(chēng)為可以停止后續(xù)的執(zhí)行還可以合在一起一起終止多個(gè)的執(zhí)行是多個(gè)值的惰性推送集合。

Observable

Observable類(lèi)似于函數(shù)聲明

var observable = Rx.Observable.create(function subscribe(observer) {
  var id = setInterval(() => {
    observer.next("hi")
  }, 1000)
});

subscribe類(lèi)似于函數(shù)調(diào)用(類(lèi)似于function.call),調(diào)用時(shí)傳入回調(diào)函數(shù)observer對(duì)象來(lái)執(zhí)行

observable.subscribe({next:x => console.log(x)})

執(zhí)行后的返回值稱(chēng)為Subscription,可以停止后續(xù)Observable的執(zhí)行,Subscription還可以合在一起,一起終止多個(gè)Observable的執(zhí)行

var subscription = observable.subscribe({next:x => console.log(x)})
subscription.unsubscribe()

Observable是多個(gè)值的惰性推送集合。

Observable和普通函數(shù)的區(qū)別:

普通的function會(huì)同步的返回一個(gè)值,屬于一種拉取值的操作,你可以確定這個(gè)值是存在的,而Observable可以同步或異步的返回一個(gè)或多個(gè)值,屬于推送值的操作,類(lèi)似于Promise,你并不確定這個(gè)值是否存在,也不知道何時(shí)會(huì)接收到數(shù)據(jù),但是可以通過(guò)回調(diào)函數(shù)的方式,明確當(dāng)值可用的時(shí)候做什么操作.

為什么要用Observable呢,因?yàn)樗梢酝瓿梢恍┢胀╢unction完成不了的工作,比如:

純凈性

純凈性使你的代碼無(wú)需引入外部狀態(tài),更不容易出錯(cuò)。

var count = 0;
var button = document.querySelector("button");
button.addEventListener("click", () => console.log(`Clicked ${++count} times`));
// 使用rxjs
var button = document.querySelector("button");
Rx.Observable.fromEvent(button, "click")
  .scan(count => count + 1, 0)
  .subscribe(count => console.log(`Clicked ${count} times`));
流動(dòng)性

RxJS 提供了一整套操作符來(lái)幫助你控制事件如何流經(jīng) observables ,代碼更簡(jiǎn)潔,更可讀。

var count = 0;
var rate = 1000;
var lastClick = Date.now() - rate;
var button = document.querySelector("button");
button.addEventListener("click", () => {
  if (Date.now() - lastClick >= rate) {
    console.log(`Clicked ${++count} times`);
    lastClick = Date.now();
  }
});
var button = document.querySelector("button");
Rx.Observable.fromEvent(button, "click")
  .throttleTime(1000)
  .scan(count => count + 1, 0)
  .subscribe(count => console.log(`Clicked ${count} times`));
Subject

Subject類(lèi)似于事件監(jiān)聽(tīng),會(huì)在內(nèi)部維護(hù)多個(gè)observer

var subject = new Rx.Subject();

subject.subscribe({
  next: (v) => console.log("observerA: " + v)
});
subject.subscribe({
  next: (v) => console.log("observerB: " + v)
});

調(diào)用Subject.next時(shí)發(fā)送事件通知,將依次執(zhí)行Subject內(nèi)部維護(hù)的全部observer

var subject = new Rx.Subject();

subject.subscribe({
  next: (v) => console.log("observerA: " + v)
});
subject.subscribe({
  next: (v) => console.log("observerB: " + v)
});

subject.next(1)
subject.next(2)

在某個(gè)Observable聲明之后,進(jìn)行subscribe調(diào)用時(shí)也可以傳入Subject,這將依次執(zhí)行Subject內(nèi)部維護(hù)的全部observer

var subject = new Rx.Subject();

subject.subscribe({
  next: (v) => console.log("observerA: " + v)
});
subject.subscribe({
  next: (v) => console.log("observerB: " + v)
});

var observable = Rx.Observable.from([1, 2, 3]);

observable.subscribe(subject); 
BehaviorSubject

BehaviorSubject是Subject的一個(gè)變體,它有一個(gè)“當(dāng)前值”的概念。當(dāng)前值是發(fā)送給消費(fèi)者的最后一個(gè)值。在new BehaviorSubject時(shí)可以初始化一個(gè)當(dāng)前值。當(dāng)有新的觀察者訂閱時(shí),會(huì)立即從 BehaviorSubject 那接收到“當(dāng)前值”。

var subject = new Rx.BehaviorSubject(0); // 0是初始的當(dāng)前值

subject.subscribe({
  next: (v) => console.log("observerA: " + v)
});

subject.next(1);
subject.next(2);

subject.subscribe({
  next: (v) => console.log("observerB: " + v)
});

subject.next(3);
ReplaySubject

ReplaySubject類(lèi)似于BehaviorSubject,它有一個(gè)“緩沖值”的概念,可以想象成多個(gè)"當(dāng)前值"。在new ReplaySubject時(shí)可以初始化一個(gè)"緩沖值"的數(shù)量,當(dāng)有新的觀察者訂閱時(shí),會(huì)立即從 ReplaySubject 那接收到每一個(gè)“緩沖值”。

除了緩沖數(shù)量,你還可以指定 window time (以毫秒為單位)來(lái)確定多久之前的值可以記錄。

var subject = new Rx.ReplaySubject(3); // 為新的訂閱者緩沖3個(gè)值

subject.subscribe({
  next: (v) => console.log("observerA: " + v)
});

subject.next(1);
subject.next(2);
subject.next(3);
subject.next(4);

subject.subscribe({
  next: (v) => console.log("observerB: " + v)
});

subject.next(5);
AsyncSubject

AsyncSubject 是另一個(gè) Subject 變體,只有當(dāng) Observable 執(zhí)行完成時(shí)(執(zhí)行 complete()),它才會(huì)將執(zhí)行的最后一個(gè)值發(fā)送給觀察者。

var subject = new Rx.AsyncSubject();

subject.subscribe({
  next: (v) => console.log("observerA: " + v)
});

subject.next(1);
subject.next(2);
subject.next(3);
subject.next(4);

subject.subscribe({
  next: (v) => console.log("observerB: " + v)
});

subject.next(5);
subject.complete();
總結(jié)

observable的執(zhí)行類(lèi)似函數(shù)調(diào)用,subject的執(zhí)行類(lèi)似事件監(jiān)聽(tīng).

observer是一些待執(zhí)行的函數(shù),Observable可以執(zhí)行observer,Subject也可以執(zhí)行observer,只不過(guò)是兩種不同的運(yùn)行模式,究竟用哪種視情況而定

操作符

操作符就是以特定的observer來(lái)訂閱原observable,然后返回一個(gè)以特定操作結(jié)果作為next值的新的Observable

function multiplyByTen(input) {
    // 原observable被封裝在新的observable內(nèi)部,只有外部的observable被訂閱時(shí)才會(huì)執(zhí)行內(nèi)部的訂閱
    const output = Observable.create(function subscribe(observer) {
        input.subscribe(val => {
            observer.next(val * 10)
        })
    })
    // 返回新的observable
    return output;
}

var source = Observable.create(function subscribe(observer) {
    observer.next(1)
    observer.next(2)
});

multiplyByTen(source).subscribe(val => console.log(val))

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/97988.html

相關(guān)文章

  • RxJS和react開(kāi)發(fā)mac地址輸入框

    摘要:項(xiàng)目簡(jiǎn)介本次使用了和開(kāi)發(fā)了一個(gè)地址輸入框,主要實(shí)現(xiàn)的功能有限制輸入符合條件的字符并每隔兩位可以自動(dòng)添加用于分割的冒號(hào)。項(xiàng)目屏蔽了的事件處理,同時(shí)使用來(lái)手動(dòng)控制光標(biāo)。繼承于和因此同時(shí)具有和兩者的方法。后面的和都是需要利用最新的來(lái)進(jìn)行判斷的。 項(xiàng)目簡(jiǎn)介 本次使用了RxJS和react開(kāi)發(fā)了一個(gè)mac地址輸入框,主要實(shí)現(xiàn)的功能有限制輸入符合條件的字符1-9,a-f,并每隔兩位可以自動(dòng)添加用于...

    CastlePeaK 評(píng)論0 收藏0
  • RxJS融入React項(xiàng)目

    摘要:技術(shù)積累經(jīng)過(guò)社區(qū)的努力學(xué)習(xí)資料還是很多的,官方中文文檔就已經(jīng)很不錯(cuò),不過(guò)我們先從天精通初步感受一下然后配合一些中文文檔來(lái)補(bǔ)充知識(shí)點(diǎn),最后再根據(jù)官方文檔來(lái)校驗(yàn)整個(gè)知識(shí)體系。資料學(xué)習(xí)操作符的時(shí)候可以對(duì)照彈珠圖的交互彈珠圖的中文版中文文檔 前言 最近準(zhǔn)備畢設(shè),技術(shù)選型的時(shí)候因?yàn)楣δ艿囊恍┬枨鬁?zhǔn)備將RxJs融入到項(xiàng)目中,考慮RxJs的時(shí)候因?yàn)橹暗募夹g(shù)棧還猶豫了一下,查了一些資料以及粗略瀏覽了...

    frontoldman 評(píng)論0 收藏0
  • 2018前端值得關(guān)注的技術(shù)

    摘要:年前端有哪些領(lǐng)域,技術(shù)值得關(guān)注,哪些技術(shù)會(huì)興起,哪些技術(shù)會(huì)沒(méi)落。自從谷歌提出后,就持續(xù)的獲得了業(yè)界的關(guān)注,熱度可見(jiàn)一斑。就在今年,谷歌也宣布將獲得與安卓原生應(yīng)用同等的待遇與權(quán)限。但是無(wú)論都值得關(guān)注。 1.前言 2017悄然過(guò)去,2018已經(jīng)來(lái)到。人在進(jìn)步,技術(shù)在發(fā)展。2018年前端有哪些領(lǐng)域,技術(shù)值得關(guān)注,哪些技術(shù)會(huì)興起,哪些技術(shù)會(huì)沒(méi)落。下面就我個(gè)人的判斷進(jìn)行一個(gè)預(yù)測(cè)判斷,希望能對(duì)大家...

    xiao7cn 評(píng)論0 收藏0
  • 2018前端值得關(guān)注的技術(shù)

    摘要:年前端有哪些領(lǐng)域,技術(shù)值得關(guān)注,哪些技術(shù)會(huì)興起,哪些技術(shù)會(huì)沒(méi)落。自從谷歌提出后,就持續(xù)的獲得了業(yè)界的關(guān)注,熱度可見(jiàn)一斑。就在今年,谷歌也宣布將獲得與安卓原生應(yīng)用同等的待遇與權(quán)限。但是無(wú)論都值得關(guān)注。 1.前言 2017悄然過(guò)去,2018已經(jīng)來(lái)到。人在進(jìn)步,技術(shù)在發(fā)展。2018年前端有哪些領(lǐng)域,技術(shù)值得關(guān)注,哪些技術(shù)會(huì)興起,哪些技術(shù)會(huì)沒(méi)落。下面就我個(gè)人的判斷進(jìn)行一個(gè)預(yù)測(cè)判斷,希望能對(duì)大家...

    用戶(hù)84 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<