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

使用forkJoin处理Subscription时subscribe未触发的问题求助

问题核心原因
  • forkJoin 操作符的入参要求是可观察对象(Observable),你代码里传给forkJoin的this.SUB_getActSearch是调用.subscribe()之后返回的订阅对象(Subscription),类型完全不匹配,自然不会触发回调。
修复方案
  1. 新增变量存储请求对应的Observable,不要直接存Subscription
// 原有存储订阅的变量保留,新增存储Observable的变量
public obs_getActSearch: Observable<any>;
public SUB_getActSearch: Subscription;
  1. 发起请求时先存Observable,再单独订阅处理原有业务逻辑
// 先把接口请求的Observable存下来
this.obs_getActSearch = this.searchService.getActSearch({ ...searchOBJ2, PageSize: this.pageSize, PageNumber: this.currentPage });
// 单独订阅处理列表渲染的业务逻辑
this.SUB_getActSearch = this.obs_getActSearch.subscribe((res) => {
  this.Act_Data = [];
  let headerPagin = JSON.parse(res.headers.get('X-Pagination'));
  this.elementsLength = headerPagin.totalCount;
  this.currentPage = headerPagin.currentPage;
  this.pageSize = headerPagin.pageSize;
  res.body.map((param) => {
    this.Act_Data.push(param);
  });
  this.ActDataSource = new MatTableDataSource<Element>(this.Act_Data);
});
  1. 测试forkJoin时传入存储的Observable即可
public testingforkJoin(): void {
  // 入参传Observable,不要传Subscription
  forkJoin(
    this.obs_getActSearch
  ).subscribe(val => console.log("xxxxx", val));
}
补充注意点
  • 如果你不想每次订阅obs_getActSearch都重复发起接口请求,可以在Observable后加shareReplay(1)操作符缓存结果:
    this.obs_getActSearch = this.searchService.getActSearch(/*请求参数*/).pipe(shareReplay(1));
    
  • forkJoin 要等所有传入的Observable都触发complete事件才会返回结果,符合常规Http请求Observable的行为(请求结束后自动complete),如果是自定义的长连接Observable需要额外处理complete逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 06:15:02