angular之Rxjs异步数据流编程入门
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异步数据流编程入门的更多相关文章
- Angular RxJs:针对异步数据流编程工具
一. RxJs:针对异步数据流编程工具 1. 创建subject类对象(发送方) 2. subject.subscribe(观察者); (注册观察者对象observer,可以注册多个相当于回调函数取数 ...
- 【响应式编程的思维艺术】 (5)Angular中Rxjs的应用示例
目录 一. 划重点 二. Angular应用中的Http请求 三. 使用Rxjs构建Http请求结果的处理管道 3.1 基本示例 3.2 常见的操作符 四. 冷热Observable的两种典型场景 4 ...
- 脑残式网络编程入门(六):什么是公网IP和内网IP?NAT转换又是什么鬼?
本文引用了“帅地”发表于公众号苦逼的码农的技术分享. 1.引言 搞网络通信应用开发的程序员,可能会经常听到外网IP(即互联网IP地址)和内网IP(即局域网IP地址),但他们的区别是什么?又有什么关系呢 ...
- Android 4 编程入门经典
这是一本入门级的经典教才从Android编程入门到发布Android应用程序,每一个章节都是讲得很透,让人轻松的接受. 第1章 Android编程入门 1.1 Android简介 1.1.1 Andr ...
- 微软TTS语音引擎编程入门
原文链接地址:http://www.jizhuomi.com/software/135.html 我们都使用过一些某某词霸的英语学习工具软件,它们大多都有朗读的功能,其实这就是利用的Windows ...
- PHP面向对象(OOP)编程入门教程
面向对象编程(OOP)是我们编程的一项基本技能,PHP5对OOP提供了良好的支持.如何使用OOP的思想来进行PHP的高级编程,对于提高 PHP编程能力和规划好Web开发构架都是非常有意义的.下面我们就 ...
- Windows编程入门程序详解
引用:http://blog.csdn.net/jarvischu/article/details/8115390 1. 程序 /******************************* ...
- 【PHP面向对象(OOP)编程入门教程】1.什么是面向对象?
面向对象编程(Object Oriented Programming, OOP, 面向对象程序设计)是一种计算机编程架构,OOP的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成 ...
- Linux 利器- Python 脚本编程入门(一)
导读 众所周知,系统管理员需要精通一门脚本语言,而且招聘机构列出的职位需求上也会这么写.大多数人会认为 Bash (或者其他的 shell 语言)用起来很方便,但一些强大的语言(比如 Python)会 ...
随机推荐
- OSI七层模型的新认识
OSI 七层模型是internet的基石,它并没有制定一个标准,规定我们要怎么去做.美国军方曾把它精简到四层,只是站在了更实用的层次. 我们先来看看这个模型. 应用层->Applicatio ...
- You are what you say!
说话的方式表现了你的角色,所以说话的口吻在不同场合要贴合自己的身份和角色 尖锐的问题:如果要说一个比较尖锐的问题,那么可以把这个问题推理一下,从比较生活化的一点开始,或者将问题推给虚拟的第三方(但是注 ...
- Visual Studio C# 利用git和github协同开发时产生冲突的解决办
Visual Studio C# 利用git和Github协同开发时产生冲突的解决办法 前言:在前两天的助教作业中,发现了自己没有办法解决在用vs开发C#的窗体项目的过程中产生的冲突问题,在查阅了资料 ...
- Codeforces Round #510 (Div. 2) C. Array Product
题目 题意: 给你n个数,有两种操作,操作1是把第i个位置的数删去, 操作2 是把 a[ j ]= a[ i ]* a[ j ],把a[ i ]删去 .n-1个操作以后,只剩1个数,要使这个数最大 . ...
- java中创建对象的方式
Java中有5种创建对象的方式,下面给出它们的例子还有它们的字节码 使用new关键字 } → 调用了构造函数 使用Class类的newInstance方法 } → 调用了构造函数 使用Construc ...
- VueRouter基础
安装 直接下载(官方CDN) https://unpkg.com/vue-router/...通过页面script标签引入,如下: <script src='https://unpkg.com/ ...
- Vue之nextTick()
我们有时候操作 DOM,是想在 data 数据变更的时候进行操作. 那么,我们应该怎么做呢? index.html <!DOCTYPE html> <html lang=" ...
- Codeforces Round #555 (Div. 3) C1,C2【补题】
D1:思路:L,R指针移动,每次选最小的即可. #include<bits/stdc++.h> using namespace std; #define int long long #de ...
- linux 中将用户添加到组的 4 个方法
Linux 组是用于管理 Linux 中用户帐户的组织单位.对于 Linux 系统中的每一个用户和组,它都有惟一的数字标识号.它被称为 用户 ID(UID)和组 ID(GID).组的主要目的是为组的成 ...
- [剖析] 多路径ALUA技术如何优化I/O处理
什么是ALUA多路径机制 ALUA是异步逻辑单元访问(Asymmetric Logical Unit Access)的缩写,ALUA是SPC3 (SCSI Primary commands-3)协议中 ...