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);
    });
  }

}

 

posted @ 2020-01-08 23:49  生如逆旅,一苇以航  阅读(544)  评论(0编辑  收藏  举报