源代码:

import { of } from 'rxjs';
import { Injectable } from '@angular/core';
import { map } from 'rxjs/operators';@Injectable()
export class JerrySandBoxService{name = 'Jerry';print(){const observable = of(1, 2, 3);const opt = map(num => 'hello world: ' + num + ' done');const newObservable = opt(observable);newObservable.subscribe(data => console.log(data));}
}

执行结果:

map操作符接收的是一个箭头函数:


map内部的实现:返回一个新的名为mapOperation的函数,接受单参数。

现在执行opt操作:

source是Observable,project是应用开发人员指定的箭头函数:

Map operator的构造函数:

新建一个Observable对象,将当前Observable对象传给source,operator.project即箭头函数:


对新的Observable对象调用subscribe:

注意这种语法:把this里包含的operator对象赋值给大括号里的operator变量:

sink是subscriber,source是Observable,operator是箭头函数:

如果有operator,先执行箭头函数:


把箭头函数返回的结果,作为新的输入参数,传入到subscriber的next方法里:



最终执行调用subscribe时传入的箭头函数:


再看另一个例子:使用map优雅地消费一个API:


const http$ : Observable<Course[]> = this.http.get('/api/courses');http$.pipe(tap(() => console.log('HTTP request executed')),map(res => Object.values(res['payload']))).subscribe(courses => console.log("courses", courses));

要获取更多Jerry的原创文章,请关注公众号"汪子熙":

rxjs里的Observable对象和map配合的一个用法相关推荐

  1. rxjs里的Observable对象subscribe方法的执行原理

    看个例子: const myObservable = of(1, 2, 3);// 创建一个观察者对象-Observer(处理next.error.complete回调)const myObserve ...

  2. rxjs里的Observable对象如何消费

    测试代码: import { of } from 'rxjs'; import { Injectable } from '@angular/core';@Injectable() export cla ...

  3. 通过一个最简单的例子,理解Angular rxjs里的Observable对象的pipe方法

    源代码: import { of } from 'rxjs'; import { Injectable } from '@angular/core'; import { map } from 'rxj ...

  4. rxjs of操作符生成的Observable对象的执行详细分析

    代码: const a = of([1, 2, 3]); a.subscribe((data) => console.log('Fairy:' + data)); 单步调试,首先执行of所在的i ...

  5. 如何在Chrome调试器里检查嵌套Observable对象

    一个例子: 举个例子,看如下这个嵌套的Observable对象: items$: Observable<Observable<Product>[]> = this.compon ...

  6. 从调试器里观察到的Observable对象反推出其赋值的源代码位置

    展开Observable对象,从其operator能观察到施加在该Observable对象上的操作: Map操作:(event) => this.getBreakpoint(event.targ ...

  7. rxjs里switchMap operators的用法

    switchMap相关文章 rxjs里switchMap operators的用法 通过rxjs的一个例子, 来学习SwitchMap的使用方法 rxjs switchMap的实现原理 rxjs的ma ...

  8. rxjs 里的pipe operator

    源代码: const a = of([1, 2, 3]);const b = map((data: number[]) => {for( let i = 0; i < data.lengt ...

  9. rxjs里scan operator的执行研究

    源代码: ngOnInit(): void {console.log('before ngOnInit');const source$ = range(0, 10);source$.pipe(/*fi ...

最新文章

  1. Mysql:命令选项、配置选项、(全局、会话)系统变量、状态变量:命令选项...
  2. react取消所有请求_React Hooks中取消HTTP请求来避免内存泄漏
  3. java面试换背景颜色_证件照换底色 证件照换背景 证件照背景颜色
  4. linux ftp服务器构建
  5. 业界盘点|为什么推荐算法都开始结合图神经网络了?
  6. 我的职场战争--一年来的开发组内战实录
  7. php static_castunsigned int,static_cast揭密
  8. 《软件需求分析(第二版)》第 11 章——一图胜千言 重点部分总结
  9. 【华为云技术分享】机器学习(02)——学习资料链接
  10. 四大领域全面发力,腾讯云构筑全链路开发者服务体系
  11. 深入理解Flink ---- 系统内部消息传递的exactly once语义
  12. cenos安装erlang
  13. Java学习之贷款案例
  14. android 自定义View【2】对话框取色色盘取色的实现
  15. Unity 基础 之 Camera摄像机属性介绍
  16. 英特尔核显驱动hd630_hd630相当于什么显卡
  17. 肿瘤全外显子--记录
  18. 介绍dbt,ETL和ELT Disrupter
  19. 强大的健身软件——Keep
  20. MFC PreTranslateMessage(MSG* pMsg)中调用DoModal()模态窗口问题

热门文章

  1. 如何在Mac上安装win10正版系统
  2. Ehcache BigMemory: 摆脱GC困扰(转)
  3. Yii rabc角色权限管理文章推荐
  4. ASP.NET的地址重写“.NET研究”(URLRewriter)实现原理及代码示例
  5. 分享Silverlight/WPF/Windows Phone一周学习导读(06月13日-06月18日)
  6. 在Windows 2000下优化Oracle9i性能[转]
  7. Github 完整学习教程
  8. [力扣]1018_可被5整除的二进制前缀
  9. OO第三次博客作业---透过代码看设计
  10. MySQL数据库篇之初识数据库