RxJs map operator 工作原理分析

简介: RxJs map operator 工作原理分析

使用一个例子来研究 map 操作符的工作原理。

推荐阅读本文之前,先浏览这篇文章RxJs fromEvent 工作原理分析以了解相关知识。

源代码:

import { Component, OnInit, Inject } from '@angular/core';
import { fromEvent, combineLatest } from 'rxjs';
import { mapTo, startWith, scan, tap, map } from 'rxjs/operators';
import { DOCUMENT } from '@angular/common';
@Component({
  selector: 'app-combine-latest',
  templateUrl: './combine-latest.component.html'
})
export class CombineLatestComponent implements OnInit {
  readonly document: Document;
  constructor(
    // https://github.com/angular/angular/issues/20351
    @Inject(DOCUMENT) document: any) {
      this.document = document as Document;
    }
  redTotal:HTMLElement;
  blackTotal: HTMLElement;
  total:HTMLElement;  
  test:HTMLElement;
  ngOnInit(): void {
    this.redTotal = this.document.getElementById('red-total'); 
    this.blackTotal = this.document.getElementById('black-total');
    this.total = this.document.getElementById('total');
    this.test = this.document.getElementById('test');
    combineLatest(this.addOneClick$('red'), 
    this.addOneClick$('black')).subscribe(([red, black]: any) => {
      this.redTotal.innerHTML = red;
      this.blackTotal.innerHTML = black;
      this.total.innerHTML = red + black;
    });
    fromEvent(this.test, 'click').pipe(map( event => event.timeStamp)).subscribe((event) => console.log(event));
  }
  addOneClick$ = id =>
  fromEvent(this.document.getElementById(id), 'click').pipe(
    // map every click to 1
    mapTo(1),
    // keep a running total
    scan((acc, curr) => acc + curr, 0),
    startWith(0)
  );
}

image.png

先缕一缕顺序:

  1. 首先执行fromEvent,返回一个 Observable 对象。
  2. 执行 map 操作符,其结果作为输入,传入 pipe

image.pngimage.png


image.png

image.png

image.png

image.png

image.png

相关文章
域对象共享数据model、modelAndView、map、mapModel、request。从源码角度分析
这篇文章详细解释了在IntelliJ IDEA中如何使用Mute Breakpoints功能来快速跳过程序中的后续断点,并展示了如何一键清空所有设置的断点。
域对象共享数据model、modelAndView、map、mapModel、request。从源码角度分析
|
3月前
|
缓存 安全 测试技术
深入理解 go sync.Map - 基本原理
深入理解 go sync.Map - 基本原理
33 0
|
5月前
map::operator[] 底层大致介绍及与 map::insert() 区别
map::operator[] 底层大致介绍及与 map::insert() 区别
|
5月前
|
监控 NoSQL 大数据
深入解析 MongoDB Map-Reduce:强大数据聚合与分析的利器
深入解析 MongoDB Map-Reduce:强大数据聚合与分析的利器
|
6月前
|
存储 C++ 容器
【STL】map和set的原理及其使用
【STL】map和set的原理及其使用
|
6月前
|
Python
【Python 基础】解释map函数的工作原理
【5月更文挑战第6天】【Python 基础】解释map函数的工作原理
|
存储 C++ 容器
C++ 第九节——map/set(用法+底层原理+模拟实现)
们需要知道的是,Map和Set的底层都是红黑树。
799 1
C++ 第九节——map/set(用法+底层原理+模拟实现)
|
11月前
三大集合--Map集合 -- 详细完整加案例分析
三大集合--Map集合 -- 详细完整加案例分析
|
机器学习/深度学习 计算机视觉 数据可视化
YOLOv5改进系列(0)——重要性能指标、训练结果评价及分析、影响mAP指标的因素、优化mAP的方法
YOLOv5改进系列(0)——重要性能指标、训练结果评价及分析、影响mAP指标的因素、优化mAP的方法
6850 0
YOLOv5改进系列(0)——重要性能指标、训练结果评价及分析、影响mAP指标的因素、优化mAP的方法
Rxjs map, mergeMap 和 switchMap 的区别和联系
Rxjs map, mergeMap 和 switchMap 的区别和联系