实例在 angulardemo06:
    //重点:Rxjs获取异步方法的数据,可以中途撤回,可以多次订阅,可以用工具处理返回的数据
    /*
    1.在service服务中引入Observable:import { Observable } from ‘rxjs’;
    1.1 在app.modules.ts中引入RequestService:import { RequestService } from ‘./services/request.service’;
    1.2 在app.modules.ts中配置RequestService:providers: [RequestService],
    1.3 在需要获取数据的ts中引入RequestService:import { RequestService } from ‘src/app/services/request.service’;
    1.4 在需要获取数据的ts的构造器中获取RequestService对象:constructor(public request:RequestService) {}
    2.在service服务中创建异步方法(自定义方法名)getRxjsData(){};
    3.在getRxjsData()方法中返回Observable对象,名称自定义,一般为observer;
    4.调用observer.next(需要处理的数据)方法发送异步数据
    5.在需要获取数据的ts中调用rxjs异步方法:var rxjsData=this.request.getRxjsData();
    6.调用该对象的subscribe方法打印即可:rxjsData.subscribe(处理结果);
    撤回操作:
    1.在需要获取数据的ts中调用rxjs异步方法:var stream=this.request.getRxjsData();
    2.调用stream.subscribe(处理结果)方法并将返回值赋给新值(自定义名称)d;
    3.调用d.unsubscribe()方法即可取消订阅
    多次订阅:
    1.可在service服务中的异步方法(自定义方法名)getRxjsIntervalData()中设置定时器(间隔几秒再次调用);
    2.方法中返回Observable对象,名称自定义,一般为observer;
    3.调用observer.next(需要处理的数据)方法发送异步数据;
    4.在需要获取数据的ts中调用rxjs异步方法:var streamInterval=this.request.getRxjsIntervalData();
    5.调用该对象的subscribe方法打印即可:streamInterval.subscribe(处理结果);
    */

    1. //Rxjs處理異步,延时触发一次
    2. getRxjsData(){
    3. return new Observable((observer)=>{
    4. setTimeout(()=>{
    5. var username='张三--Rxjs'
    6. observer.next(username);
    7. //observer.error('失败');//失败返回error,可选
    8. },3000);
    9. })
    10. }
    11. //Rxjs處理異步,定时触发多次
    12. getRxjsIntervalData(){
    13. let count=0;
    14. return new Observable((observer)=>{
    15. setInterval(()=>{
    16. count++;
    17. var username='张三--Rxjs Interval '+count+'次';
    18. observer.next(username);
    19. //observer.error('失败');//失败返回error,可选
    20. },2000);
    21. })
    22. }
    23. //Rxjs處理異步,用map,filter工具处理
    24. getRxjsIntervalNum(){
    25. let count=0;
    26. return new Observable((observer)=>{
    27. setInterval(()=>{
    28. observer.next(count++);
    29. //observer.error('失败');//失败返回error,可选
    30. },2000);
    31. })
    32. }
    1. //过1s后撤回刚才的操作
    2. var stream=this.request.getRxjsData();
    3. var d=stream.subscribe((data)=>{
    4. console.log(data);
    5. });
    6. setTimeout(()=>{
    7. d.unsubscribe();//取消订阅
    8. },1000);
    9. //Rxjs多次订阅:
    10. var streamInterval=this.request.getRxjsIntervalData();
    11. streamInterval.subscribe((data:any)=>{
    12. console.log(data);
    13. });
    14. //Rxjs用工具(map,filter)处理数据:
    15. var streamNum=this.request.getRxjsIntervalNum();
    16. streamNum.pipe(//管道可以多个工具一起使用,用逗号分隔
    17. filter((value:any)=>{
    18. if(value%2==0){
    19. return true;
    20. }else{
    21. return false;
    22. }
    23. }),
    24. map((value:any)=>{
    25. return value*value;
    26. })
    27. ).subscribe((data:any)=>{
    28. console.log(data);
    29. });