RxJS V8适配:如何重构移除ResultSelector的exhaustMap代码?
适配RxJS V8版本的exhaustMap重构方案
首先,你当前的代码不需要任何修改就能适配V8版本——因为你的代码里并没有使用exhaustMap的ResultSelector参数(也就是第二个可选参数)。RxJS V8要移除的只是exhaustMap的第二个参数,仅使用第一个投影函数的写法完全兼容V8。
如果你的代码之前存在使用ResultSelector参数的场景(比如类似下面的旧写法):
interval(5000) .pipe( takeWhile(() => !this.isDialogDestroyed), // 旧写法:使用了第二个参数resultSelector,将源值和内部Observable值合并 exhaustMap( () => this.versService.checkStatus(myParameters), (originalIntervalValue, statusValue) => ({ interval: originalIntervalValue, status: statusValue }) ) )
那需要把ResultSelector的逻辑移到内部Observable的map操作符中,重构后代码如下:
interval(5000) .pipe( takeWhile(() => !this.isDialogDestroyed), // 保留源值,在内部Observable的pipe中处理值映射 exhaustMap(originalIntervalValue => this.versService.checkStatus(myParameters).pipe( map(statusValue => ({ interval: originalIntervalValue, status: statusValue })) ) ) )
核心思路是:将原本在ResultSelector中处理的「源Observable值」和「内部Observable值」的合并/转换逻辑,放到内部Observable的map操作符里完成,彻底不再依赖exhaustMap的第二个参数。
回到你提供的代码,因为没有涉及ResultSelector参数,直接保留现有写法即可正常在V8中运行。
内容的提问来源于stack exchange,提问作者LeO
相关产品推荐
相关产品推荐

