Rxjs--创建操作符
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
創(chuàng)建操作符中除了repeat都是靜態(tài)方法直接從Rx.Observable上使用
取代回調(diào)函數(shù)(bindCallback、fromPromise)、直接創(chuàng)建(creat、Observable構(gòu)造函數(shù)、from、of、fromEvent)、
惰性創(chuàng)建(defer)、范圍連續(xù)整數(shù)值(range)、連續(xù)整數(shù)(interval、timer)、重復(fù)(repeat)、
用于組合(never、empty、throw)
bindCallback
public static bindCallback(func: function, selector: function, scheduler: Scheduler): function(...params: *): Observable給它一個(gè)簽名為f(x, callback)的函數(shù) f ,返回一個(gè)函數(shù) g , 調(diào)用 'g(x)' 的時(shí)候會(huì)返回一個(gè) Observable.
很重要的一點(diǎn)是,輸出函數(shù)返回的 Observable 被訂閱之前,輸入函數(shù)是不會(huì)執(zhí)行的.
| 名稱 | 類型 | 屬性 | 描述 |
| func | function | ? | 最后一個(gè)參數(shù)是回調(diào)的函數(shù)。 |
| selector | function | 可選的 | 選擇器,從回調(diào)函數(shù)中獲取參數(shù)并將這些映射為一個(gè) Observable 發(fā)出的值。 |
| scheduler | Scheduler | 可選的 | 調(diào)度器,調(diào)度回調(diào)函數(shù)。默認(rèn)是同步的 |
selector 函數(shù)接受和回調(diào)一樣的參數(shù),返回 Observable 發(fā)出的值。在默認(rèn)情況下,傳遞給回調(diào)的多個(gè)參數(shù)將在流中顯示為數(shù)組。選擇器函數(shù)直接用參數(shù)調(diào)用,就像回調(diào)一樣.
bindNodeCallback
public static bindNodeCallback(func: function, selector: function, scheduler: Scheduler): *就像是?bindCallback, 但是回調(diào)函數(shù)必須形如?callback(error, result).
從文件系統(tǒng)中讀取文件并且從 Observable 中獲取數(shù)據(jù)。 import * as fs from 'fs'; var readFileAsObservable = Rx.Observable.bindNodeCallback(fs.readFile); var result = readFileAsObservable('./roadNames.txt', 'utf8'); result.subscribe(x => console.log(x), e => console.error(e));create
public static create(onSubscription: function(observer: Observer): TeardownLogic): Observable創(chuàng)建一個(gè)新的 Observable, 當(dāng)觀察者(?Observer?)訂閱該 Observable 時(shí), 它會(huì)執(zhí)行指定的函數(shù).
defer
public static defer(observableFactory: function(): SubscribableOrPromise): Observable創(chuàng)建一個(gè) Observable, 當(dāng)被訂閱的時(shí)候, 調(diào)用 Observable 工廠為每個(gè)觀察者創(chuàng)建新的 Observable. 延遲創(chuàng)建 Observable, 也就是說(shuō), 當(dāng)且僅當(dāng)它被訂閱的時(shí)候才創(chuàng)建
empty
public static empty(scheduler: Scheduler): Observable僅僅發(fā)出 complete 通知,其他什么也不做
from
public static from(ish: ObservableInput<T>, scheduler: Scheduler): Observable<T>從一個(gè)數(shù)組、類數(shù)組對(duì)象、Promise、迭代器對(duì)象或者類 Observable 對(duì)象創(chuàng)建一個(gè) Observable
fromEvent
public static fromEvent(target: EventTargetLike, eventName: string, options: EventListenerOptions, selector: SelectorMethodSignature<T>): Observable<T>創(chuàng)建一個(gè)來(lái)自于 DOM 事件,或者 Node 的 EventEmitter 事件或者其他事件的 Observable
fromEventPattern
public static fromEventPattern(addHandler: function(handler: Function): any, removeHandler: function(handler: Function, signal?: any): void, selector: function(...args: any): T): Observable<T>將任何 addHandler/removeHandler 的API轉(zhuǎn)化為 Observable
function addClickHandler(handler) {document.addEventListener('click', handler); }function removeClickHandler(handler) {document.removeEventListener('click', handler); }fromPromise
public static fromPromise(promise: PromiseLike<T>, scheduler: Scheduler): Observable<T>返回一個(gè)僅僅發(fā)出 Promise resolve 過(guò)的值然后完成的 Observable
generate
Observable構(gòu)造函數(shù),和creat一樣
interval
public static interval(period: number, scheduler: Scheduler): Observableinterval?返回一個(gè)發(fā)出無(wú)限自增的序列整數(shù), 你可以選擇固定的時(shí)間間隔進(jìn)行發(fā)送。 第一次并 沒(méi)有立馬去發(fā)送, 而是第一個(gè)時(shí)間段過(guò)后才發(fā)出。 默認(rèn)情況下, 這個(gè)操作符使用 async 調(diào)度器來(lái) 提供時(shí)間的概念,但也可以給它傳遞任意調(diào)度器。
| 名稱 | 類型 | 屬性 | 描述 |
| period | number |
| 時(shí)間間隔,它以毫秒為單位(默認(rèn)),或者由調(diào)度器的內(nèi)部時(shí)鐘決定的時(shí)間單位。 |
| scheduler | Scheduler |
| 調(diào)度器,用來(lái)調(diào)度值的發(fā)送并提供”時(shí)間“的概念。 |
never
public static never(): Observable這個(gè)靜態(tài)操作符對(duì)于創(chuàng)建既不發(fā)出數(shù)據(jù)也不觸發(fā)錯(cuò)誤和完成通知的 Observable。 可以用來(lái)測(cè)試或 者和其他 Observables進(jìn)行組合。 注意,由于不會(huì)發(fā)送完成通知,這個(gè) Observable 的 subscription 不會(huì)被自動(dòng)地清理。Subscriptions 需要手動(dòng)清理。
of
public static of(values: ...T, scheduler: Scheduler): Observable<T>這個(gè)靜態(tài)操作符適用于創(chuàng)建簡(jiǎn)單的 Observable, 該 Observable 只發(fā)出給定的參數(shù), 在發(fā)送完這些參數(shù)后發(fā)出完成通知。它可以用來(lái)和其他 Observables 組合比如說(shuō)concat。 默認(rèn)情況下, 它使用null調(diào)度器,這意味著next通知是同步發(fā)出的, 盡管使用不同的調(diào)度器可以決定這些通知何時(shí)送到。
repeat
public repeat(count: number): Observable返回的 Observable 重復(fù)由源 Observable 所發(fā)出的項(xiàng)的流,重復(fù) count 次
repeatWhen
public repeatWhen(notifier: function(notifications: Observable): Observable): Observable返回的 Observalbe 是源 Observable 的鏡像,除了?complete?。如果源 Observable 調(diào)用了?complete,這個(gè)方法會(huì)發(fā)出給?notifier?返回的 Observable 。如果這個(gè) Observale 調(diào)用了?complete?或?error,那么這個(gè)方法會(huì)在子 subscription 上調(diào)用?complete?或?error?。
let clicks = Rx.Observable.fromEvent(document, 'click');let observable = Rx.Observable.of(1, 2);let subscription = observable.repeatWhen(() => clicks);subscription.subscribe(res => console.log(res));range
public static range(start: number, count: number, scheduler: Scheduler): Observablerange?操作符順序發(fā)出一個(gè)區(qū)間范圍內(nèi)的連續(xù)整數(shù), 你可以決定區(qū)間的開(kāi)始和長(zhǎng)度。 默認(rèn)情況下, 不使用 調(diào)度器僅僅同步的發(fā)送通知, 但是也可以可選的使用可選的調(diào)度器來(lái)控制發(fā)送。
throw
public static throw(將具體的: any, scheduler: Scheduler): Observable這個(gè)靜態(tài)操作符對(duì)于創(chuàng)建簡(jiǎn)單的只發(fā)出錯(cuò)誤通知的 Observable 十分有用。 可以被用來(lái)和其他 Observables 組合, 比如在?mergeMap?中使用
timer
public static timer(initialDelay: number | Date, period: number, scheduler: Scheduler): Observable| initialDelay | number?|?Date | ? | 在發(fā)出第一個(gè)值 0 之前等待的初始延遲時(shí)間。 |
| period | number |
| 連續(xù)數(shù)字發(fā)送之間的時(shí)間周期。 |
| scheduler | Scheduler |
| 調(diào)度器,用來(lái)調(diào)度值的發(fā)送, 提供“時(shí)間”的概念。 |
就像是interval, 但是可以指定什么時(shí)候開(kāi)始發(fā)送
轉(zhuǎn)載于:https://my.oschina.net/u/3412211/blog/1606564
總結(jié)
以上是生活随笔為你收集整理的Rxjs--创建操作符的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: DAY4-打卡第四天-2018-1-12
- 下一篇: ES6中this的三种用法