如何实现单个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
相关产品推荐
相关产品推荐

