2017-11-10 9 views
1

は私がイオン3アプリケーションで複数にObservable Sを使用して、いくつかのデータをキャッシュしようとしています:Angular 2/Ionic 3で複数のObservableからエラー処理を実行する方法は?

import { Observable } from "rxjs/Observable"; 
import 'rxjs/add/observable/forkJoin' 

// saves data for a single article 
private saveToCache(articleId: number): Observable<any> { 
    this.loadingCtrl.create({ content: "Caching data. Please wait..." }); 
    this.loadingCtrl.present(); 

    let key = articleId; 
    let obs = this.articleService.getArticleFullData(key); 
    obs.subscribe(data => { 
     this.loadingCtrl.dismiss(); 
     this.cache.saveItem("" + key, data as ArticleFullData); 
     this.loggingService.logInfo("Cache article: " + key); 
    }, 
    err => { 
     this.loggingService.logError("Failed to cache data: " + key); 
     this.loadingCtrl.dismiss(); 

     var toastObj = this.toastCtrl.create({ message: "Failed to cache data: ", duration: 2000 }); 
     toastObj.present(); 
    } 
    ); 

    return obs; 
} 

// handler to perform caching for a list of articles 
onCacheRefresh() { 
    // articles are not loaded for some reason 
    if (!this.articles) 
     return; 

    var obsArray = []; 
    for (let article of this.articles) { 
     let key = "" + article.ArticleId; 

     // already in cache 
     this.cache.getItem(key) 
      .then(data => { 
       console.log("Cache item already exists: ", data); 
      }) 
      .catch(err => { 
       obsArray.push(this.saveToCache(article.ArticleId)); 
      }); 
    } 

    let err: boolean = false; 
    Observable.forkJoin(obsArray).toPromise() 
     .catch(err => { 
      if (err) 
       return; 
      err = true; 

      this.loggingService.logError("Failed to cache data: ", JSON.stringify(err)); 
      var toastObj = this.toastCtrl.create({ message: "Failed to cache data: ", duration: 2000 }); 
      toastObj.present(); 
     }); 
} 

が場合は、何らかの理由で、データをフェッチし、障害ごとに実行されますforkJoinためcatchを失敗しました。私がしたいのは、トースト通知を1回だけ表示できることです。

質問:Observable複数のエラーの処理方法を教えてください。

答えて

1

wit combineLatest演算子を試すことができます。構文は次のようになります。

オブザーバブルのいずれかが例外をスローすると、一度呼び出されるキャッチを追加できます。

関連する問題