SwitchMap result from Angular Redux Store



我有一个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>'.

感谢

这是我根据您所描述的内容和您在此处显示的代码得出的最佳猜测:

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
);

高阶运算符的意义在于它为您管理订阅,这就是避免嵌套订阅(并避免一整类可能的错误(的方法。你会在这里注意到你只需要订阅一次。

最新更新