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

如何在RxJS的mergeMap中重复请求至满足条件后传递结果?

如何重复请求直到满足条件再传递结果到后续操作?

你可以用RxJS的expand操作符实现重复请求直到满足特定条件,它支持基于前一次请求结果判断是否继续调用,最后配合last()拿到符合要求的结果传递给后续的mergeMap。

修改后的代码示例:

import { EMPTY } from 'rxjs';
import { mergeMap, expand, last } from 'rxjs/operators';

someRequest().pipe(
  mergeMap((info) => {
    // 修正原代码笔误:lastInfo改为info
    this.appService.petitionId$.next(Number(info.petitionId));
    
    // 用expand递归执行请求直到满足条件
    return anotherRequest().pipe(
      expand((response) => {
        // 替换为你的具体判断条件,比如response.status === 'success'
        if (你的条件判断逻辑(response)) {
          // 条件满足,终止递归
          return EMPTY;
        } else {
          // 不满足条件,继续发起请求
          return anotherRequest();
        }
      }),
      // 只保留最后一次满足终止条件的响应结果
      last()
    );
  }),
  mergeMap((validResponse) => {
    // 使用符合要求的响应结果执行后续操作
    return yourNextRequest(validResponse);
  })
);

关键逻辑说明:

  • expand:每次收到请求响应后,根据条件判断是否继续调用anotherRequest,返回EMPTY会直接终止递归流程
  • last():expand会发出每一次请求的响应,用这个操作符可以只取最后那个满足终止条件的结果,确保后续mergeMap拿到的是符合要求的值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 19:01:00