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)
上一篇 2022年4月2日 下午4:00
下一篇 2022年4月2日 下午4:35


相关推荐

  • 什么是是JAVA构造函数

    什么是是JAVA构造函数每创建一个类的实例都去初始化它的所有变量是乏味的。如果一个对象在被创建时就完成了所有的初始工作,将是简单的和简洁的。因此,Java在类里提供了一个特殊的成员函数,叫做构造函数(Constructor)。一个构造函数是对象被创建时初始对象的成员函数。它具有和它所在的类完全一样的名字。一旦定义好一个构造函数,创建对象时就会自动调用它。构造函数没有返回类型,即使是void类型也没有。这是因为…

    2022年7月8日
    26
  • docker部署influx_docker容器部署

    docker部署influx_docker容器部署使用docker部署influxdbdocker-compose.yamlversion:”3″services:influxdb:image:influxdb:latestcontainer_name:influxdbenvironment:-INFLUXDB_DB=db0-INFLUXDB_ADMIN_ENABLED=true-INFLUXDB_ADMIN_USER=admin-INF.

    2022年10月19日
    6
  • vbscript语法错误对照

    vbscript语法错误对照MicrosoftVBS 语法错误 0x800A03E9 内存不足 MicrosoftVBS 语法错误 0x800A03EA 语法错误 MicrosoftVBS 语法错误 0x800A03EB 缺少 MicrosoftVBS 语法错误 0x800A03ED 缺少

    2026年3月18日
    2
  • 开发报错记录解决(一):AttributeError: module ‘pywt‘ has no attribute ‘wavedec2‘

    开发报错记录解决(一):AttributeError: module ‘pywt‘ has no attribute ‘wavedec2‘当遇到类似module‘pywt’hasnoattribute‘wavedec’之类的错误的时候.例如:AttributeError:module’pywt’hasnoattribute’wavedec2’按下面的步骤走一遍就可以:步骤:1、打开cmd终端或Anaconda3终端。2、输入pipuninstallpywt。3、输入pipinstallPyWavelets。问题解决。…

    2022年7月23日
    19
  • 外键(FOREIGN KEY)

    外键(FOREIGN KEY)引子:把所有数据都存放于一张表的弊端  1、表的组织结构复杂不清晰  2、浪费空间  3、扩展性极差为了解决上述的问题,就需要用多张表来存放数据。表与表的记录之间存在着三种关系:一对多、多对多、一对一的关系。处理表之间关系问题就会利用到FOREIGNKEY多对一关系:寻找表与表之间的关系的套路  举例:雇员表:emp表  部门:dep表    part1:    …

    2022年6月29日
    30
  • angular基础面试题_java web面试题

    angular基础面试题_java web面试题angular用管道转换数据Angular为典型的数据转换提供了内置的管道,包括国际化的转换(i18n),它使用本地化信息来格式化数据。数据格式化常用的内置管道如下: DatePipe:根据本地环境中的规则格式化日期值。 DatePipe:Formatsadatevalueaccordingtolocalerules. UpperCasePipe:把文本全部转换成大写。 LowerCasePipe:把文本全部转换成小写。 LowerCasePipe:.

    2022年10月18日
    4

发表回复

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

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