Rxjs6.x异步数据流编程-Angular Rxjs快速入门教程
app.module.ts
import{RequestService} from "./services/request.service";
providers: [RequestService],
request.service.ts
import { Injectable } from '@angular/core';
import{Observable} from "rxjs";
import { from } from 'rxjs';
@Injectable({
providedIn: 'root'
})
export class RequestService {
constructor() { }
//同步
getData() {
return "this is service data";
}
getCallbackData(cb){
setTimeout(()=>{
var username="张三";
cb(username);
},1000);
}
getPromiseData(){
return new Promise((resolve,reject)=>{
setTimeout(()=>{
var username="李四";
resolve(username);
},1000);
});
}
getRxjsData(){
return new Observable((observer)=>{
setTimeout(()=>{
var username="张三----Rxjs";
observer.next(username);
},2000);
});
}
//多次执行:
getPromiseIntervalData(){
return new Promise((resolve,reject)=>{
setInterval(()=>{
var username="李四";
resolve(username);
},1000);
});
}
getRxjsIntervalData(){
let count=0;
return new Observable((observer)=>{
count++;
setInterval(()=>{
var username="张三----Rxjs--"+count;
observer.next(username);
},2000);
});
}
getRxjsIntervalNum(){
let count=0;
return new Observable((observer)=>{
setInterval(()=>{
count++;
observer.next(count);
},1000);
});
}
}
request-home.component.ts
import { Component, OnInit } from '@angular/core';
import { RequestService } from "../../services/request.service";
import { map, filter } from "rxjs/operators";
@Component({
selector: 'app-request-home',
templateUrl: './request-home.component.html',
styleUrls: ['./request-home.component.scss']
})
export class RequestHomeComponent implements OnInit {
constructor(public request: RequestService) { }
ngOnInit() {
//同步方法:
// let data = this.request.getData();
// console.log(data);
// //回调函数解决异步的问题:
// this.request.getCallbackData((data) => {
// console.log(data);
// });
// //通过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);
// });
//map
// var streemNum = this.request.getRxjsIntervalNum();
// streemNum.pipe(
// map((value) => {
// return value * value;
// })
// ).subscribe((data) => {
// console.log(data);
// });
//map和filter一起使用:
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);
});
}
}

浙公网安备 33010602011771号