Angular / RXJS - 如何在 switchMap 之后执行逻辑
Angular / RXJS - How to perform logic after a switchMap
在我的一个组件中,我有一个更新本地可观察对象 (album$
) 的函数,然后在我的 html 中使用它来显示数据 (*ngIf="album$ | async as album"
)。这工作得很好。
getData() {
this.album$ = this._activatedRoute.params.pipe(
tap(params => {
// Update variables
}),
switchMap(params => {
return this.service.getData(params.id, params.id2);
})
)
}
但是,新要求意味着我需要更新我的一项服务中的 BehaviorSubject。上面的函数似乎是一箭双雕的好地方。
一旦returns上面的函数是数据,我想执行patchValue
和this.service.obs$.next
。
我确实在我拥有的一个单独的组件中实现了这个功能,但是由于我没有在上面的组件中使用订阅,我将如何在上面的函数中添加 this.service.album$.next(data);
?
// 另一个函数的示例,它具有我非常想要的功能,但它是基于订阅的。
getData(){
this._subscription = this._activatedRoute.params.pipe(
tap(params => {
// update variables
}),
switchMap(params => {
return this.service.getData(params.id1, params.id2);
})
).subscribe(data => {
if (data) {
this.service.obs$.next(data);
}
});
}
您可以将 tap
或 map
通过管道传输到内部可观察对象。尝试以下
getData() {
this.album$ = this._activatedRoute.params.pipe(
tap(params => {
// update variables
}),
switchMap(params => {
return this.service.getData(params.id, params.id2).pipe(
tap(data => {
this.service.obs$.next(data);
// patch value
// do something else
})
);
})
);
}
在我的一个组件中,我有一个更新本地可观察对象 (album$
) 的函数,然后在我的 html 中使用它来显示数据 (*ngIf="album$ | async as album"
)。这工作得很好。
getData() {
this.album$ = this._activatedRoute.params.pipe(
tap(params => {
// Update variables
}),
switchMap(params => {
return this.service.getData(params.id, params.id2);
})
)
}
但是,新要求意味着我需要更新我的一项服务中的 BehaviorSubject。上面的函数似乎是一箭双雕的好地方。
一旦returns上面的函数是数据,我想执行patchValue
和this.service.obs$.next
。
我确实在我拥有的一个单独的组件中实现了这个功能,但是由于我没有在上面的组件中使用订阅,我将如何在上面的函数中添加 this.service.album$.next(data);
?
// 另一个函数的示例,它具有我非常想要的功能,但它是基于订阅的。
getData(){
this._subscription = this._activatedRoute.params.pipe(
tap(params => {
// update variables
}),
switchMap(params => {
return this.service.getData(params.id1, params.id2);
})
).subscribe(data => {
if (data) {
this.service.obs$.next(data);
}
});
}
您可以将 tap
或 map
通过管道传输到内部可观察对象。尝试以下
getData() {
this.album$ = this._activatedRoute.params.pipe(
tap(params => {
// update variables
}),
switchMap(params => {
return this.service.getData(params.id, params.id2).pipe(
tap(data => {
this.service.obs$.next(data);
// patch value
// do something else
})
);
})
);
}