codecamp

RxJS expand

递归地将每个源值投影到一个 Observable,将其合并到输出 Observable 中。

expand<T, R>(project: (value: T, index: number) => any, concurrent: number = Number.POSITIVE_INFINITY, scheduler: SchedulerLike = undefined): OperatorFunction<T, R>

参量

项目 当应用于源或输出 Observable 发出的项目时,返回 Observable的函数。
同时 可选的。默认值为Number.POSITIVE_INFINITY。并发订阅的最大输入 Observable 数。
调度器 可选的。默认值为undefined。在SchedulerLike使用用于订阅每个投影内观察到。

returns

OperatorFunction<T, R>:一个 Observable,它发出源值,并且还会对输出 Observable 上发出的每个值应用投影函数,并合并从此变换获得的 Observables 的结果。

描述

它类似于mergeMap,但是将投影函数应用于每个源值以及每个输出值。它是递归的。

展开大理石图

返回一个 Observable,它基于将您提供的函数应用于源 Observable 发出的每个项目而发出项目,该函数返回 Observable,然后合并这些结果 Observables 并发出此合并的结果。扩展将在输出 Observable 上重新发射每个源值。然后,将每个输出值提供给该project函数,该 函数返回一个内部 Observable,以将其合并到输出 Observable 中。由投影得出的那些输出值也被赋予project函数以产生新的输出值。这是 扩展递归行为的方式。

每次点击就开始发出 2 的幂,最多 10 次

import { fromEvent, of } from 'rxjs';
import { expand, mapTo, delay, take } from 'rxjs/operators';


const clicks = fromEvent(document, 'click');
const powersOfTwo = clicks.pipe(
  mapTo(1),
  expand(x => of(2 * x).pipe(delay(1000))),
  take(10),
);
powersOfTwo.subscribe(x => console.log(x));

也可以看看

RxJS exhaustMap
RxJS filter
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

RxJS operators

RxJS fetch

RxJS testing

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }