rxjs of操作符生成的Observable对象的执行详细分析
生活随笔
收集整理的這篇文章主要介紹了
rxjs of操作符生成的Observable对象的执行详细分析
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
代碼:
const a = of([1, 2, 3]); a.subscribe((data) => console.log('Fairy:' + data));單步調試,首先執行of所在的index.ts:
of.js的實現很簡單:
import { isScheduler } from '../util/isScheduler'; import { fromArray } from './fromArray'; import { scheduleArray } from '../scheduled/scheduleArray'; export function of(...args) {let scheduler = args[args.length - 1];if (isScheduler(scheduler)) {args.pop();return scheduleArray(args, scheduler);}else {return fromArray(args);} } //# sourceMappingURL=of.js.map沒有scheduler,走fromArray這條路:
fromArray.js的實現:
import { Observable } from '../Observable'; import { subscribeToArray } from '../util/subscribeToArray'; import { scheduleArray } from '../scheduled/scheduleArray'; export function fromArray(input, scheduler) {if (!scheduler) {return new Observable(subscribeToArray(input));}else {return scheduleArray(input, scheduler);} } //# sourceMappingURL=fromArray.js.map這個subscribeToArray是一個函數構造器,接收一個數組,返回一個新的函數:
export const subscribeToArray = (array) => (subscriber) => {for (let i = 0, len = array.length; i < len && !subscriber.closed; i++) {subscriber.next(array[i]);}subscriber.complete(); }; //# sourceMappingURL=subscribeToArray.js.map該函數和我們在應用代碼里調用Observable對象的subscribe方法時傳入的回調函數有何區別?
繼續往下調試。
調用Observable對象的subscribe方法:
ObserverOrNext就是上圖第63行的箭頭函數,error和complete為undefined:
新建一個Subscriber對象:
subscriber的父類是subscription:
subscriber的destination是一個SafeSubscriber:
SafeSubscriber也是一個Subscriber:
這個emptyObservable啥實現也沒有:
總結
以上是生活随笔為你收集整理的rxjs of操作符生成的Observable对象的执行详细分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《LOL》9.13塞拉斯可以打野吗 塞拉
- 下一篇: rxjs 里的subscribeToAr