RxJS之组合操作符 ( Angular环境 )

RxJS之组合操作符 ( Angular环境 )

大家好,又见面了,我是你们的朋友全栈君。

一 merge操作符

把多个 Observables 的值混合到一个 Observable 中

import { Component, OnInit } from '@angular/core';
import { of } from 'rxjs/observable/of';
import { range } from 'rxjs/observable/range';
import { merge } from 'rxjs/observable/merge';
import { Observable } from 'rxjs/Observable';

@Component({
  selector: 'app-combine',
  templateUrl: './combine.component.html',
  styleUrls: ['./combine.component.css']
})
export class CombineComponent implements OnInit {

  constructor() { }

  ngOnInit() {
    const low: Observable<number> = range(100, 3);
    const middle: Observable<number> = range(200, 3);
    const high: Observable<number> = range(300, 3);
    merge(low, middle, high).subscribe((val: number) => {
      console.log(val);
    });
  }

}

RxJS之组合操作符 ( Angular环境 )

合并是没有顺序的:先到达的值在合并后的Observable中先输出。

import { Component, OnInit } from '@angular/core';
import { merge } from 'rxjs/observable/merge';
import { interval } from 'rxjs/observable/interval';
import { map } from 'rxjs/operators/map';
import { delay } from 'rxjs/operators/delay';

@Component({
  selector: 'app-combine',
  templateUrl: './combine.component.html',
  styleUrls: ['./combine.component.css']
})
export class CombineComponent implements OnInit {

  constructor() { }

  ngOnInit() {
    let count = 0;
    const subscription = merge(
      interval(30).pipe(map(val => val + 300)),
      interval(40).pipe(map(val => val + 400)),
      interval(50).pipe(map(val => val + 500))
    ).pipe(delay(3000)) // 合并后的Observable,延迟3秒再开始的输出
      .subscribe(
        val => {
          count++;
          console.log(val);
          if (count >= 10) { // 只输出10个数
            subscription.unsubscribe();
          }
        }
      );
  }

}

RxJS之组合操作符 ( Angular环境 )

 二 forkJoin操作符

forkJoin will wait for all passed Observables to complete and then it will emit an array with last values from corresponding Observables.

import { Component, OnInit } from '@angular/core';
import { Observable } from 'rxjs/Observable';
import { forkJoin } from 'rxjs/observable/forkJoin';
import { of } from 'rxjs/observable/of';

@Component({
  selector: 'app-combine',
  templateUrl: './combine.component.html',
  styleUrls: ['./combine.component.css']
})
export class CombineComponent implements OnInit {

  constructor() { }

  ngOnInit() {
    forkJoin(
      of(1, 3, 5, 7),
      of(2, 4, 6, 8)
    ).subscribe(
      (arr: number[]) => {
        console.log(`next: ${arr[0]}, ${arr[1]}`);
      },
      null,
      () => {
        console.log('complete.');
      }
    );
  }

}

RxJS之组合操作符 ( Angular环境 )

处理并行的多个ajax请求 ( safari停止跨域限制 )

import { Component, OnInit } from '@angular/core';
import { Observable } from 'rxjs/Observable';
import { forkJoin } from 'rxjs/observable/forkJoin';
import { of } from 'rxjs/observable/of';
import { HttpClient } from '@angular/common/http';

@Component({
  selector: 'app-combine',
  templateUrl: './combine.component.html',
  styleUrls: ['./combine.component.css']
})
export class CombineComponent implements OnInit {

  constructor(public http: HttpClient) { }

  ngOnInit() {
    forkJoin(
      this.http.get('https://www.baidu.com', { responseType: 'text' }),
      this.http.get('https://www.sogou.com', { responseType: 'text' })
    ).subscribe(
      (arr: any[]) => {
        const baidu = arr[0].substring(arr[0].indexOf('<title>') + 7, arr[0].indexOf('</title>'));
        const sogou = arr[1].substring(arr[1].indexOf('<title>') + 7, arr[1].indexOf('</title>'));
        console.log(baidu);
        console.log(sogou);
      }
    );
  }
}

RxJS之组合操作符 ( Angular环境 )

三 startWith操作符

返回的 Observable 会先发出作为参数指定的项,然后再发出由源 Observable 所发出的项。

import { Component, OnInit } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { of } from 'rxjs/observable/of';
import { startWith } from 'rxjs/operators/startWith';

@Component({
  selector: 'app-combine',
  templateUrl: './combine.component.html',
  styleUrls: ['./combine.component.css']
})
export class CombineComponent implements OnInit {

  constructor(private http: HttpClient) { }

  ngOnInit() {
    of('Mikey', 'Don').pipe(
      startWith('Leo', 'Raph')
    ).subscribe(
      (val: string) => {
        console.log(val);
      }
    );
  }
}

RxJS之组合操作符 ( Angular环境 )

 

转载于:https://www.cnblogs.com/sea-breeze/p/8969158.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/107554.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Flake8_quakemaker

    Flake8_quakemakerFlake8简介转载自:http://www.malike.net.cn/blog/2013/10/23/flake8-tutorial/| COMMENTSFlake8包装了下列工具:PyFlakes:静态检查Python代码逻辑错误的工具。pep8:静态检查PEP8编码风格的工具。NedBatchelder’sMcCabescript:静态

    2025年11月10日
    4
  • 对象转json忽略空参「建议收藏」

    对象转json忽略空参「建议收藏」有时候我们在传json的时候需要过滤掉那些数据为空的参数,我们可以这样:JsonUtil.object2JSON(request,SerializerFeature.WriteDateUseDateFormat); 当然,也可以这样:JSON.toJSONString(request)这两种方式都需要添加阿里的jar包&lt;dependency&gt; &lt;gr…

    2025年12月5日
    4
  • pycharm 查看函数帮助_python中函数和方法区别

    pycharm 查看函数帮助_python中函数和方法区别按住ctrl键,将鼠标放到函数上,就会显示函数信息,点击进去可以查看函数源码。

    2022年8月28日
    4
  • 签名设计手写简单_怎么写自己的签名

    签名设计手写简单_怎么写自己的签名首语:大家好,很多人都想设计一个简单的艺术签名,所以就有人开始找【签名设计手写简单】,这其实对于设计师来说的很简单的事情。写字的时候也有简单的时候,也有复杂的时候。真的需要怎么去取舍,这就要看你是如何去选择了。签名设计手写简单首先说一下,三秒艺术签名网的所有签名都是手写完成的,大家这一点不要质疑。其次是说到简单,其实写签名就是要让名字变得简单,好写,这样才会让人感觉,舒畅。但是不是什么字都能被写的简单的,这需要考虑一个文字的笔画多少程度,举个例子“饕餮”这两个字就不好去做简化。像,明啊,等啊,峰啊

    2025年9月22日
    9
  • xshell5连接不上虚拟机_虚拟机的网络连接设置

    xshell5连接不上虚拟机_虚拟机的网络连接设置一:首先解决的关于ping的问题1.在虚拟机中ping百度看能不能先ping通,如果虚拟机连接不上网络的话Xshell肯定是连接不上的,如果有上述情况的请点击二:检查你虚拟机中防火墙是否关闭CentOs6中查看防火墙状态:serviceiptablesstatus关闭防火墙:serviceiptablesstop禁用防火墙:chkconfigiptablesoffCentOs7中查看防火墙状态:systemctlstatusfirewalld.service关闭防火墙:

    2022年9月22日
    3
  • 触发显示和隐藏 div

    触发显示和隐藏 div

    2022年3月7日
    66

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号