• Angular同步与异步获取服务数据(附完整代码)


    同步与异步获取服务数据

    1. 同步:直接获取服务已有数据

    2. 异步:

        1)   使用回调函数实现

        2)  使用Promise实现

        3)  使用Rxjs实现:import { Observable } from 'rxjs';

        4)  同时,Rxjs功能更强大,可取消订阅,可多次订阅

    完整代码

    组件:home

    html:

    <p>同步获取服务数据-----{{data}}</p>
    <p>异步获取服务数据--回调函数-----{{data1}}</p>
    <p>异步获取服务数据--Promise实现-----{{data2}}</p>
    
    <p>异步获取服务数据--RXJS 实现-----{{data3}}</p>

    TS:

    import { Component, OnInit } from '@angular/core';
    import {RequestService} from '../../services/request.service';
    @Component({
      selector: 'app-home',
      templateUrl: './home.component.html',
      styleUrls: ['./home.component.css']
    })
    export class HomeComponent implements OnInit {
      public data:string;
      public data1:string;
      public data2:any;
      public data3:any;
      
      constructor(public resevice:RequestService) { 
        this.data=this.resevice.getData();//同步获取服务数据
        this.resevice.getCallBackData((d)=>{//异步获取服务数据--回调函数
          this.data1=d;
          // console.log(d);
          
        });
        var promiseData=this.resevice.getPromiseData();
        promiseData.then((data)=>{
           this.data2=data;
        });
    
    
        // 异步获取服务数据--RXJS 实现   
        var rxjsData=this.resevice.getRxjsData();
       var d= rxjsData.subscribe((data)=>{
          this.data3=data;
        })
    
        //取消异步订阅 不会显示张三--rxjs
        setTimeout(() => {
          d.unsubscribe();//取消订阅
        }, 2000);
        //异步多次订阅
      var rxjsData1=this.resevice.getRxjsDataInterval();
      rxjsData1.subscribe((data)=>{
          console.log(data);
        })
      }
    
      ngOnInit(): void {
      }
     
    }

    服务:reques

    TS

    import { Injectable } from '@angular/core';
    import { Observable } from 'rxjs';
    @Injectable({
      providedIn: 'root'
    })
    export class RequestService {
    
      constructor() { }
      getData():string{//同步获取服务数据
        return "this is service data!";
      }
      //异步获取服务数据--回调函数
      getCallBackData(cb){
        setTimeout(() => {
          var username="张三--callback";
          cb(username);
        }, 1000);
      }
      //异步获取服务数据--Promise实现
      getPromiseData(){
        return new Promise((resolve)=>{
          setTimeout(() => {
            var username="张三--promise";
            resolve(username);
          }, 1000);
        });
      }
      //异步获取服务数据--RXJS 实现
      getRxjsData(){
        return new Observable((observe)=>{
          setTimeout(() => {
            var username="张三--rxjs";
            observe.next(username);
          }, 3000);
        });
      }
    //异步多次订阅
      getRxjsDataInterval(){
        let count=0;
        return new Observable((observe)=>{
          setInterval(() => {
             count++;
            var username="张三--rxjs";
            observe.next(username+count);
          }, 1000);
         
        });
      }
    }
    由于无法解释的神圣旨意,我们徒然地到处找你;你就是孤独,你就是神秘,比恒河或者日落还要遥远。。。。。。
  • 相关阅读:
    双11实时物流订单最佳实践
    一文理解 K8s 容器网络虚拟化
    新能源汽车太猛了,这些卡脖子技术你了解吗?
    龙蜥社区成立系统运维SIG,重磅开源sysAK系统运维工具集
    sysAK(青囊)系统运维工具集:如何实现高效自动化运维?| 龙蜥技术
    零信任策略下云上安全信息与事件管理最佳实践
    MySQL 处理重复数据
    JavaScript toFixed()、toExponential、toPrecision方法
    Nginx 安装
    spring定时任务执行两次的原因与解决方法
  • 原文地址:https://www.cnblogs.com/momoli/p/13560975.html
Copyright © 2020-2023  润新知