Angular中RxJS concatMap间如何传递partyId以在tap中使用?
解决方案:保留partyId上下文到后续操作符
问题出在第二个concatMap仅返回了getType的结果,导致后续tap操作符无法访问之前的partyId。要解决这个问题,只需要在第二个concatMap中将partyId与getType的结果组合成一个对象传递下去,这样后续操作就能同时获取到两个值。
修改后的完整代码如下:
.pipe( concatMap(() => this.security.getUser()), tap((partyId) => { if (!partyId) { window.location.assign(`${environment.redirectURL1}/dashboard/login`); } }), // 将partyId和getType的结果组合成对象传递 concatMap((partyId) => this.security.getType(partyId).pipe( map(result => ({ partyId, result })) ) ), // 解构对象获取partyId和result tap(async ({ partyId, result }) => { if (result) { this.loggingService.setUser(result.partyId, result.partyType, result.lendingType); } else { this.loggingService.setUser(partyId, 'null', 'null'); } }) )
关键修改点:
- 在第二个
concatMap内部,通过map操作符把partyId和getType的结果包装成一个对象,让数据流同时包含这两个值。 - 后续的
tap操作通过对象解构,直接获取partyId和result,无论result是否为null,都能访问到最初的partyId。
内容的提问来源于stack exchange,提问作者Fazla Elahi Md Jubayer
相关产品推荐
相关产品推荐

