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

RxJS无限循环异常:每次调用fetchData输入值始终相同

问题原因及修复方案

问题根源

  1. 同步递归导致时间戳无变化:expand操作符会同步递归调用fetchData,而of()是同步Observable,所有调用会在瞬间完成。由于你的now是秒级时间戳(Math.floor(Date.now() / 1000)),同一秒内多次调用生成的时间戳完全相同,因此每次传入的since值都是同一个,console.log自然输出重复内容。
  2. 操作符使用顺序错误:delay(3000)是延迟整个流的所有结果,而非每次调用fetchData之间的间隔;repeat()会让整个流从头重复,而非基于上一次的结果继续递归,完全不符合你“每次传入上一次返回的since”的需求。

修复代码

fetchData().pipe(
  expand((response) => {
    const { since } = response;
    // 每次递归调用前延迟3秒,确保时间戳更新
    return fetchData(since).pipe(delay(3000));
  })
).subscribe();

修复说明

  • 移除多余的repeat():expand本身支持无限递归,无需重复整个流。
  • 在expand内部添加delay(3000):让每次递归调用fetchData前等待3秒,确保下一次调用时的now是新的秒级时间戳,同时传入的since是上一次调用返回的结果。
  • 初始调用后会自动进入递归循环,每次间隔3秒,console.log会输出每次不同的since值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 15:43:09