我有http拦截器。在该拦截器中,更改请求之前,我需要先打开加载程序。
让我真正担心的是,我最终有很多切换图。
为什么?
我在加载程序服务中做什么
showLoader(message){
return this.translateService.get(message).pipe(switchMap( (translatedMessage)=>{
this.loader$ = from(this.loadingController.create({message: translatedMessage}));
return this.loader$.pipe(switchMap((loader)=>{
return from(loader.present());
}));
}));
}
在我的拦截器中
intercept(request: HttpRequest<any>, next: HttpHandler) {
return this.loaderService.showLoader("WAITING").pipe(
take(1),
switchMap( ()=>{
因此已经嵌套了3个switchmap。在它下面,我需要2到3个以上的切换图(一个用于从存储中获取令牌,另一个用于其他操作)。基本上以5个switchmap结束。
问题:嵌套所有这些switchMap是不好的做法吗?
答案 0 :(得分:2)
最好使用许多switchMap
,尤其是当您需要异步行为时,不良的做法是触摸数据流之外的内容。
在您的代码this.loader$
中是它的一个示例,与其在流之外使用变量,不如尝试构建一个在内部执行您想要的所有事情的管道。
如果from
和this.loadingController.create
像loader.present
一样Promise
支持switchMap
,Observable
,甚至可以忽略Promise
Array
和Iterator
。
您的代码可能就是这样
public showLoader(message) {
return this.translateService.get(message).pipe(
switchMap(translatedMessage => this.loadingController.create({message: translatedMessage})),
switchMap(loader => loader.present()),
);
}