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);})}}
转载于:https://www.cnblogs.com/loaderman/p/10906222.html
angular之Rxjs异步数据流编程入门相关推荐
- RxJS——异步数据流的响应式编程库(适合新手入门)
文章目录 RxJS概述 Redux VS RxJS RxJS核心概念解析 热观察和冷观察 merge/combine合流 RXJS6 的变化 RxJS概述 RxJS 全称 Reactive Exten ...
- 【响应式编程的思维艺术】 (5)Angular中Rxjs的应用示例
[摘要] Rxjs在angular中的基本应用 本文是[Rxjs 响应式编程-第四章 构建完整的Web应用程序]这篇文章的学习笔记. 示例代码托管在:http://www.github.com/das ...
- [译]函数式响应编程入门指南
原文地址:An Introduction to Functional Reactive Programming 原文作者:Daniel Lew 译文出自:掘金翻译计划 本文永久链接:github.co ...
- 【Angular 4】响应式编程
Rxjs? 响应式编程主要是通过观察者模式实现,在Angular中的Rxjs即是它的具体实现.它们的关系如下? 这个图只是简单的数据流,实际上,所有事物都可以用流处理,比如页面上的按钮点击事件: im ...
- linux操作系统下 c语言编程入门
linux操作系统下 c语言编程入门 (一)目录介绍 1)Linux程序设计入门--基础知识 2)Linux程序设计入门--进程介绍 3)Linux程序设计入门--文件操作 4)Linux程序设计入门 ...
- linux操作系统下c语言编程入门
linux操作系统下c语言编程入门 整理编写:007xiong 原文:Hoyt等 (一)目录介绍 1)Linux程序设计入门--基础知识 2)Linux程序设计入门--进程介绍 3)Linux ...
- 【转贴】linux操作系统下c语言编程入门
[转贴]linux操作系统下c语言编程入门 发信人: Lerry (驴是的念来过倒·杏红等头墙上爬), 信区: Linux 标 题: linux操作系统下c语言编程入门 发信站: 哈工大紫丁香 (Fr ...
- Linux网络编程 入门
Linux网络编程入门 (转载) (一)Linux网络编程--网络知识介绍 Linux网络编程--网络知识介绍 客户端和服务端 网络程序和普通的程序有一个最大的区别是网络程序是由两个 ...
- Concurrency in C# Cookbook中文翻译 :1.3并发性概述:响应式编程入门(Rx)
Introduction to Reactive Programming (Rx) 响应式编程入门(Rx) Reactive programming has a higher learning cur ...
最新文章
- Oracle SQL Tuning Advisor 测试
- 安装hbas_非常详细的HBase的安装与配置
- 初识java_初识java
- 解放你内心的自然领袖,从你的内心而非你的自我来领导你自己
- Office 365 批量创建用户步骤
- 将NetConf转成NormalizedNode对象及NormalizedNode对象转回NetConf(序列化与反序列化)
- 抽取python 标准库页面生成 mobi 离线文件
- JAva面试题(微信分享)
- android 根据时间获取周几_android 调用系统 calendars 如何获取一个指定日期的所有日程 event。...
- 利用VSCode阅读OpenFOAM源代码及其调试Debug【终极总结篇】
- JRockit JRCMD教程
- 校友邮箱_freeCodeCamp校友网络:FCC校友的自主指导网络
- python访问多个网页_如何使用python请求登录具有多个页面的CAS?
- nodepad++快捷键收集
- 2019 年 9 月全国程序员工资统计,你是什么水平?
- 通过dll来引用webservice的方法(.net)
- 人工智能一种现代化学习方法——学习笔记(13章)
- 最强PostMan使用教程(1)
- python竞赛猜名次_五人预测比赛结果均答对一半,求比赛名次
- LTE 终端如何申请 RB 资源以及现实面临的问题
热门文章
- constraintlayout布局新特性_安卓ConstraintLayout布局
- php mysql商品管理_PHP基础示例:商品信息管理系统v1.1[转]
- 一条正确的Java职业生涯规划,顺利拿到offer
- 【OpenCV的C++教程2】加载、修改、保存图像
- Pytorch框架的深度学习优化算法集(优化中的挑战)
- python【力扣LeetCode算法题库】35- 搜索插入位置
- 全卷积神经网路【U-net项目实战】论文中U-Net网络实现
- 修改服务器文件系统为xfs,CentOS Linux如何无损调整分区大小(XFS文件系统)
- c语言中的文件类型只有文本文件一种,C语言中的文件类型只有哪两种_后端开发...
- java 类成员访问权限_Java类成员访问权限控制知识总结