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

如何实现单个subscribe订阅多个timer定时器的触发事件?

实现方案

你可以借助RxJS的合并类操作符实现单次订阅,有两种常用写法:

写法1:from + mergeMap

import { from, mergeMap, timer } from 'rxjs';

const milliseconds = [3 * 1000, 30 * 1000, 10 * 1000];

from(milliseconds)
  .pipe(
    mergeMap(m => timer(m))
  )
  .subscribe(() => {
    console.log('notification!!');
  });

写法2:直接合并timer实例

import { merge, timer } from 'rxjs';

const milliseconds = [3 * 1000, 30 * 1000, 10 * 1000];

merge(
  ...milliseconds.map(m => timer(m))
).subscribe(() => {
  console.log('notification!!');
});

说明

  • 两种写法效果完全一致,所有定时器会同时启动,到点后触发订阅回调,触发顺序和你原有实现完全相同:3秒、10秒、30秒依次打印日志。
  • 如果你需要按数组定义的顺序依次执行定时器(前一个结束后再启动下一个),把第一种写法中的mergeMap替换为concatMap即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 21:57:02