Rxjs介绍

参考手册:https://www.npmjs.com/package/rxjs

中文手册:https://cn.rx.js.org/

RxJS 是 ReactiveX 编程理念的 JavaScript 版本。ReactiveX 来自微软,它是一种针对异步数据 流的编程。简单来说,它将一切数据,包括 HTTP 请求,DOM 事件或者普通数据等包装成流 的形式,然后用强大丰富的操作符对流进行处理,使你能以同步编程的方式处理异步数据, 并组合不同的操作符来轻松优雅的实现你所需要的功能。

RxJS 是一种针对异步数据流编程工具,或者叫响应式扩展编程;可不管如何解释 RxJS 其目 标就是异步编程,Angular 引入 RxJS 为了就是让异步可控、更简单。

RxJS 里面提供了很多模块。这里我们主要给大家讲 RxJS 里面最常用的 Observable 和 fromEvent。

目前常见的异步编程的几种方法:

1、回调函数

2、事件监听/发布订阅

3、Promise
4、Rxjs


import { Injectable } from '@angular/core';

import {Observable} from 'rxjs';

@Injectable({
providedIn: 'root'
})
export class RequestService { constructor() { } //同步
getData(){ return 'this is service data';
} getCallbackData(cb){ setTimeout(() => { var username='张三'; // return username;
cb(username); }, 1000); } getPromiseData(){ return new Promise((resolve)=>{
setTimeout(() => {
var username='张三--Promise';
resolve(username); }, 3000);
}) } getRxjsData(){ return new Observable<any>((observer)=>{
setTimeout(() => {
var username='张三--Rxjs';
observer.next(username);
// observer.error('数据')
}, 3000);
}) } //多次执行 getPromiseIntervalData(){ return new Promise((resolve)=>{
setInterval(() => {
var username='张三--Promise Interval';
resolve(username); }, 1000);
}) } getRxjsIntervalData(){ let count=0;
return new Observable<any>((observer)=>{ setInterval(() => { count++;
var username='张三--Rxjs-Interval'+count;
observer.next(username);
// observer.error('数据')
}, 1000);
}) } getRxjsIntervalNum(){ let count=0;
return new Observable<any>((observer)=>{ setInterval(() => { count++;
observer.next(count);
// observer.error('数据')
}, 1000);
}) } }
import { Component, OnInit } from '@angular/core';
import { RequestService } from '../../services/request.service';
import {map,filter} from 'rxjs/operators';
@Component({
selector: 'app-home',
templateUrl: './home.component.html',
styleUrls: ['./home.component.scss']
})
export class HomeComponent implements OnInit { constructor( public request:RequestService) { }
runParent(msg:string){ //接收子组件传递过来的数据 runParent(msg:string){
alert(msg);
}
public title='新闻标题'
ngOnInit() {
//1、同步方法 let data=this.request.getData(); console.log(data); //2、callback获取异步数据 this.request.getCallbackData((data)=>{ console.log(data); }); //3、promise获取异步数据 var promiseData=this.request.getPromiseData(); promiseData.then((data)=>{ console.log(data);
}) //4、rxjs获取异步方法里面的数据 var rxjsData=this.request.getRxjsData();
rxjsData.subscribe((data)=>{
console.log(data);
}) //5、过一秒以后撤回刚才的操作 var streem=this.request.getRxjsData(); var d=streem.subscribe((data)=>{
console.log(data);
}) setTimeout(()=>{ d.unsubscribe(); /*取消订阅*/ },1000) //6、promise 执行多次(没有这个能力) var intervalData=this.request.getPromiseIntervalData(); intervalData.then((data)=>{ console.log(data);
}) //7、rxjs执行多次 var streemInterval=this.request.getRxjsIntervalData(); streemInterval.subscribe((data)=>{
console.log(data);
}) //8、用工具方法对返回的数据进行处理 var streemNum=this.request.getRxjsIntervalNum();
streemNum.pipe(
filter((value)=>{ if(value%2==0){
return true;
}
})
)
.subscribe((data)=>{
console.log(data);
}) var streemNum=this.request.getRxjsIntervalNum();
streemNum.pipe(
map((value)=>{ return value*value;
})
)
.subscribe((data)=>{
console.log(data);
}) var streemNum=this.request.getRxjsIntervalNum();
streemNum.pipe(
filter((value)=>{ if(value%2==0){
return true;
}
}),
map((value)=>{ return value*value;
})
)
.subscribe((data)=>{
console.log(data);
}) } }

angular之Rxjs异步数据流编程入门的更多相关文章

  1. Angular RxJs:针对异步数据流编程工具

    一. RxJs:针对异步数据流编程工具 1. 创建subject类对象(发送方) 2. subject.subscribe(观察者); (注册观察者对象observer,可以注册多个相当于回调函数取数 ...

  2. 【响应式编程的思维艺术】 (5)Angular中Rxjs的应用示例

    目录 一. 划重点 二. Angular应用中的Http请求 三. 使用Rxjs构建Http请求结果的处理管道 3.1 基本示例 3.2 常见的操作符 四. 冷热Observable的两种典型场景 4 ...

  3. 脑残式网络编程入门(六):什么是公网IP和内网IP?NAT转换又是什么鬼?

    本文引用了“帅地”发表于公众号苦逼的码农的技术分享. 1.引言 搞网络通信应用开发的程序员,可能会经常听到外网IP(即互联网IP地址)和内网IP(即局域网IP地址),但他们的区别是什么?又有什么关系呢 ...

  4. Android 4 编程入门经典

    这是一本入门级的经典教才从Android编程入门到发布Android应用程序,每一个章节都是讲得很透,让人轻松的接受. 第1章 Android编程入门 1.1 Android简介 1.1.1 Andr ...

  5. 微软TTS语音引擎编程入门

    原文链接地址:http://www.jizhuomi.com/software/135.html   我们都使用过一些某某词霸的英语学习工具软件,它们大多都有朗读的功能,其实这就是利用的Windows ...

  6. PHP面向对象(OOP)编程入门教程

    面向对象编程(OOP)是我们编程的一项基本技能,PHP5对OOP提供了良好的支持.如何使用OOP的思想来进行PHP的高级编程,对于提高 PHP编程能力和规划好Web开发构架都是非常有意义的.下面我们就 ...

  7. Windows编程入门程序详解

    引用:http://blog.csdn.net/jarvischu/article/details/8115390 1.     程序 /******************************* ...

  8. 【PHP面向对象(OOP)编程入门教程】1.什么是面向对象?

    面向对象编程(Object Oriented Programming, OOP, 面向对象程序设计)是一种计算机编程架构,OOP的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成 ...

  9. Linux 利器- Python 脚本编程入门(一)

    导读 众所周知,系统管理员需要精通一门脚本语言,而且招聘机构列出的职位需求上也会这么写.大多数人会认为 Bash (或者其他的 shell 语言)用起来很方便,但一些强大的语言(比如 Python)会 ...

随机推荐

  1. 解决windows 1903 alt + tab 切换卡顿

    右击此电脑图标 选择管理 服务和应用程序 服务 禁用system interface foundation service

  2. c语言int类型的变量输入一个字符出错

    今天遇到一个C语言的小问题,就是写一个简单的计算器,定义一个%f%c%f的三个变量,作2+3,2-3这种可以不断输入并输入“OFF”跳出循环的计算器功能,便会出现错误: 错误的示例代码如下: #inc ...

  3. TortoiseSVN “*/SendRpt.exe not found”?

  4. selenium xpath定位方式整理

    #xpath定位元素方法: /html/body/div[2] #绝对路径定位 #相对路径定位元素 //* #找到所有的元素 //input #找到input元素 //*[@*] #表示有属性的所有元 ...

  5. Inheritance and subclassing in Go - or its near likeness

    原文: http://golangtutorials.blogspot.com/2011/06/inheritance-and-subclassing-in-go-or.html ---------- ...

  6. ASP.NET 下配置请求大小、请求时间等参数

    在邮件发送系统或者其他一些传送文件的网站中,用户传送文件的大小是有限制的,因为这样不但可以节省服务器的空间,还可以提高传送文件的速度.下面介绍如何在Web.Config文件中配置限制上传文件大小与时间 ...

  7. JDK源码那些事儿之SynchronousQueue上篇

    今天继续来讲解阻塞队列,一个比较特殊的阻塞队列SynchronousQueue,通过Executors框架提供的线程池cachedThreadPool中我们可以看到其被使用作为可缓存线程池的队列实现, ...

  8. Robot Framework--接口测试中常见的四种POST方式

    写接口测试用例时,遇到以json格式提交数据时,报错,Request如下图: Response如下图: 改成form格式提交,可以正常运行,如下图: 代码如下: ------------------- ...

  9. vue-loader was used without the corresponding plugin. Make sure to include VueLoaderPlugin in your webpack config.

    默认,webpack无法打包.vue文件,需要安装 相关的loader: cnpm i vue-loader vue-template-compiler -D 提示以下错误信息: Module Err ...

  10. AOP(execution表达式)

    作者:门罗的魔术师 推荐:y-yg 在使用spring框架配置AOP的时候,不管是通过XML配置文件还是注解的方式都需要定义pointcut"切入点" 例如定义切入点表达式  ex ...