You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

RxJava中如何将多个Observable合并为单个Observable?

合并多个Observable为单一Observable的方案

根据你的需求,RxJS提供了多个操作符来实现多Observable的合并,不同操作符对应不同的业务场景,以下是常用方案:

使用merge:实时合并所有发射值

适合需要响应每个源Observable任意时刻发射的值的场景,所有源的发射值会按实际触发顺序合并到结果Observable中。

import { merge, interval } from 'rxjs';

// 示例:三个不同间隔的定时器Observable
const obs1 = interval(1000);
const obs2 = interval(2000);
const obs3 = interval(3000);

// 合并为单一Observable
const merged$ = merge(obs1, obs2, obs3);

// 订阅合并后的Observable
merged$.subscribe(value => console.log('合并后的值:', value));

使用concat:按顺序合并Observable

适合需要按顺序执行Observable的场景,只有前一个Observable完成后,才会订阅并执行下一个。

import { concat, of } from 'rxjs';

// 示例:三个同步发射值的Observable
const obs1 = of('A', 'B');
const obs2 = of('C', 'D');
const obs3 = of('E', 'F');

// 按顺序合并
const concatenated$ = concat(obs1, obs2, obs3);

concatenated$.subscribe(value => console.log('顺序合并的值:', value));

使用combineLatest:联动多源最新值

适合需要多源数据联动的场景,当所有源Observable至少发射过一次值后,任意源发射新值时,会将所有源的最新值组合成数组发射。

import { combineLatest, interval } from 'rxjs';
import { map } from 'rxjs/operators';

const obs1 = interval(1000);
const obs2 = interval(2000);
const obs3 = interval(3000);

// 组合所有源的最新值
const combined$ = combineLatest([obs1, obs2, obs3]).pipe(
  map(([val1, val2, val3]) => `最新值组合: ${val1}, ${val2}, ${val3}`)
);

combined$.subscribe(value => console.log(value));

使用forkJoin:等待所有操作完成后获取结果

适合一次性获取多个异步操作结果的场景,只有当所有源Observable都完成时,才会将每个源的最后一个值组合成数组发射。

import { forkJoin, of, delay } from 'rxjs';

// 模拟三个异步API请求
const obs1 = of('API1响应').pipe(delay(1000));
const obs2 = of('API2响应').pipe(delay(2000));
const obs3 = of('API3响应').pipe(delay(3000));

// 等待所有操作完成
const joined$ = forkJoin([obs1, obs2, obs3]);

joined$.subscribe(values => console.log('所有操作完成后的结果:', values));

内容的提问来源于stack exchange,提问作者Pedri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 05:40:31