如何在exhautMap(或任何map)操作符之后传递要点击的参数



我有以下代码

const updatedItems$ = this.itemChangeSubject.asObservable().pipe(
exhaustMap(itemChange => 
this.myService.changeItemStatus(
this.accountId,
itemChange.item.id
)
.pipe(
mergeMap(() => getItemsAndCache()),
catchError(() => lastItems$.pipe(first())
))
), 
tap({
next: itemChange => {
const itemStatus = itemChange.item.isItemChanged ? 'changed' : 'unchanged';
this.clicked = false;
this.alerts.success({
message: `Item is now ${itemStatus}.`
});
}
})
)

在第一个exhaustMap上的itemChange参数中,我可以访问其中包含的item对象。然而,在下面的抽头中尝试这样做时,我得到了一个错误Property 'item' does not exist on type 'unknown'。如何解决此问题,以便可以像在exhaustMap中使用itemChange一样使用它?

您试图在错误的位置访问itemChange。为了访问它,您必须将tap操作员放置在pipe中的正确位置,如下所示,

const updatedItems$ = this.itemChangeSubject.asObservable().pipe(
exhaustMap(itemChange => 
this.myService.changeItemStatus(
this.accountId,
itemChange.item.id
)
.pipe(
mergeMap(() => getItemsAndCache()),
catchError(() => lastItems$.pipe(first()),
tap({                                 // >>>>>>>> tap at right place to access itemChange
next: itemChange => {
const itemStatus = itemChange.item.isItemChanged ? 'changed' : 'unchanged';
this.clicked = false;
this.alerts.success({
message: `Item is now ${itemStatus}.`
});
}
})
))
), 
)

OR

不确定下面的答案

但根据您的代码,您可以将itemChange更改为next,并且您应该能够访问它(但如前所述,不确定(

而不是

const itemStatus = itemChange.item.isItemChanged ? 'changed' : 'unchanged';

像一样使用它

const itemStatus = next.item.isItemChanged ? 'changed' : 'unchanged';

通过将CCD_ 12保持在相同的位置。

相关内容

最新更新