0

リクエストが進行中のときにローディングインジケータを表示するソリューションを実装しようとしています。見てからthis解決策私はサービスでインターセプターを実装しました。 .do()コールバックが決して実行されないので、カウンタが致命的ではないことを除いて、すべて正常に動作します(bは決してコンソールに表示されません)。それについての考えは?リクエストが完了したかどうかを知るには?角4 - インターセプタでObservable.do()のコールバックが呼び出されない

import { Injectable } from '@angular/core'; 
import { HttpEvent, HttpInterceptor, HttpHandler, HttpRequest } from '@angular/common/http'; 
import { Observable } from 'rxjs/Observable'; 
import 'rxjs/add/operator/do'; 

import { LoadingIndicatorService } from './loading-indicator.service'; 

@Injectable() 
export class LoadingIndicatorInterceptor implements HttpInterceptor { 
    constructor(private loadingIndicatorService: LoadingIndicatorService) {} 

    intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> { 
     this.loadingIndicatorService.requestsCount++; 

     const handleObs: Observable<HttpEvent<any>> = next.handle(req); 

     console.log('a'); 
     handleObs.do(() => { 
     console.log('b'); 
     this.loadingIndicatorService.requestsCount--; 
     }); 

     return handleObs; 
    } 
} 

答えて

2

新しい観測値を返さなければならないため、do()は実行されません。そうですね。

export class LoadingIndicatorInterceptor implements HttpInterceptor { 
constructor(private loadingIndicatorService: LoadingIndicatorService) {} 

intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> { 
    this.loadingIndicatorService.requestsCount++; 

    const handleObs: Observable<HttpEvent<any>> = next.handle(req); 

    console.log('a'); 
    return handleObs.do(() => { 
    console.log('b'); 
    this.loadingIndicatorService.requestsCount--; 
    }); 
} 
} 
+0

ああ、意味があります。私は変数を返すだけで動作すると思った。しかし、とにかく小さな変更は、 'complete'コールバックである' .do() 'の3回目のコールバックでこれを行う必要があるか、否定的な' requestedCount'で終わることです。ありがとうございました。 –

関連する問題