如何在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
相关产品推荐
相关产品推荐

