• angular的observable


        类似于promise,angular里有observable来处理异步操作,接下来简要介绍一下他。在使用observable之前,需要在相应的组件里先引入

    import { Observable } from 'rxjs';

       例如,我想先创建一个发送异步请求的文件storage.service.ts,把它放在service里,哪里需要哪里引用。可以发现observable的使用和promise类似,先new一个实例,该实例接受一个函数参数,该函数参数内部可实现异步操作,又有一个observer参数,我们可以通过observer.next将异步数据抛出,这样我们就能在外部接收到该参数。

    1. // observable 使用之前先引入
    2. getObservable(){
    3. return new Observable((observer)=>{
    4. setTimeout(()=>{
    5. var data = 'observer数据'
    6. observer.next(data) //相当于promise的resolve
    7. },2000)
    8. })
    9. }

          现在我们需要在home组件中使用,注意:需要先在home.ts引入storage.service.ts,然后在consructor中定义变量

    1. import { StorageService } from 'src/app/services/storage.service';
    2. constructor(public storage:StorageService) { }

           之后便可在home组件中拿到observer.next抛出的数据

    1. let oberverData = this.storage.getObservable()
    2. let d = oberverData.subscribe((res)=>{ //相当于promise的then
    3. console.log(res)
    4. })

    与promise不同的是,observable功能更加强大。

    1、取消订阅

        observable可以在订阅之后,取消订阅

    1. setTimeout(()=>{
    2. d.unsubscribe() //一秒钟之后取消订阅,接收不到消息
    3. },1000)

    2、多次输出

         promise的状态一旦从pending变为reject或resolve后,就不会发生改变,因此他不能多次输出resolve出的值,但observable可以实现多次输出。例

    1. let p = new Promise(resolve=>{
    2. setInterval(()=>{
    3. resolve('promise interval值')
    4. },2000)
    5. })
    6. p.then(res=>console.log(res)) //只输出一次
    7. // observable
    8. let o = new Observable(observer=>{
    9. setInterval(()=>{
    10. observer.next('observable interval值')
    11. },2000)
    12. })
    13. o.subscribe(res=>console.log(res)) //每隔2秒输出一次

    3、使用pipe对抛出的数据进行处理

    1. let o1 = this.storage.getObservable1()
    2. o1.pipe(
    3. filter((data:any)=> {
    4. return data%2 == 0
    5. }),
    6. map(value => {
    7. return value*value
    8. })
    9. ).subscribe(res=>console.log(res))

  • 相关阅读:
    Loki | 数据过期自动删除策略设计
    【图形学】25 基础纹理(六、遮罩纹理)
    练[极客大挑战 2019]BuyFlag
    基于Ubuntu22和Mysql8的私有Wiki系统搭建
    【STM32】定时器
    支付宝直付通如何申请?
    【2023高教社杯】C题 蔬菜类商品的自动定价与补货决策 问题分析、数学模型及python代码实现
    Linux之防火墙
    618大促:手机品牌“神仙打架”,高端市场“谁主沉浮”?
    【uniApp学习之六】vuex
  • 原文地址:https://blog.csdn.net/weixin_49343253/article/details/125603037