来自 Angular Redux Store 的 SwitchMap 结果
Posted
技术标签:
【中文标题】来自 Angular Redux Store 的 SwitchMap 结果【英文标题】:SwitchMap result from Angular Redux Store 【发布时间】:2022-01-14 11:02:52 【问题描述】:我有一个 redux 商店,我在其中保存了一系列值,在这种情况下,合作伙伴看起来像:
partners: [ id: 1, name: 'partner 1', partnerCode: 'ABC123', ... , id: 2, name: 'partner 2', partnerCode: 'CDE567', ..., ...];
我使用以下方法获取合作伙伴:
this.store.select('partnerFunc').subscribe(data =>
this.partner = data.partners.find(t => t.partnerId === this.id);
);
我希望在我得到结果后能够执行和操作,根据返回的合作伙伴代码进行 API 调用。
this.dataService.getUsers(partnerCode).subscribe(data => this.users = data; );
我想我需要使用 switchMap,因为一旦我有我认识的相关合作伙伴想要订阅 redux 商店。我尝试了很多组合并在这里到处寻找,但似乎无法弄清楚格式。
这是我想出的最好的尝试并解释我正在尝试做的事情:
this.store.select('partnerFunc').pipe(switchMap(result =>
return result.partners.find(t => t.partnerId === this.id);
)).subscribe(value =>
this.dataService.getUsersForPartner(value.partnerId).subscribe(data =>
this.users = data;
)
);
但是第一行的结果是抛出一个错误:
Argument of type '(result: State) => IPartner' is not assignable to parameter of type '(value: State, index: number) => ObservableInput<any>'.
谢谢
【问题讨论】:
【参考方案1】:根据您所描述的内容和您在此处显示的代码,这是我的最佳猜测:
this.store.select('partnerFunc').pipe(
map(result =>
result.partners.find(t => t.partnerId === this.id)
),
switchMap((partnerId) =>
this.dataService.getUsersForPartner(partnerId)
)
).subscribe(data =>
this.users = data
);
高阶运算符的意义在于它为您管理订阅,这就是您避免嵌套订阅(并避免一整类可能的错误)的方式。您会注意到这里只需要订阅一次。
【讨论】:
以上是关于来自 Angular Redux Store 的 SwitchMap 结果的主要内容,如果未能解决你的问题,请参考以下文章
升级到 9.0 和 angular 7 后修复 angular-redux/store
typescript 使用@ angular-redux / store
Angular NGRX - 为 Redux-Devtools 命名 store/app-instance
使用来自 CanActivate 守卫的 store.dispatch