2017-10-10 66 views
0

是否可以使用forkjoin分別處理錯誤?我需要同時調用多個請求,並在請求被調用時在屏幕上顯示一個加載。如果某個請求發生錯誤,並且另一次成功,則需要在屏幕上成功顯示請求,並將錯誤消息顯示在另一個屏幕上。與Ionic 2和Angular 4搭配使用時的Handler異常

MEUcódigo沒有Page.ts:

getData(){ 
    this.loadingService.showLoader("Loading, please wait"); 

    Observable.forkJoin([ 
     this.issuesService.getIssues(), 
     this.categoryService.getCaretories() 
    ]).subscribe(
     (response) => { 

     let issues = JSON.parse((response[0] as any)._body); 
     let categories = JSON.parse((response[1] as any)._body); 

     //do something with issues and categories 

     }, (error) => { 
     console.log(`Backend returned error was: ${error}`); 
     this.closeLoading(refresher); 
     this.showContent = false; 
     },() => { 
     console.log('complete all request'); 
     this.closeLoading(refresher); 
     }); 
    } 
} 

如果問題請求時發生了錯誤,並在類別請求,返回成功。我需要在屏幕上顯示如何成功類別,並顯示錯誤消息問題

當前,發生錯誤時,會顯示所有請求的錯誤消息。

+1

你的意思是顯示錯誤爲每個請求? –

+2

可能重複[angular2 rxjs observable forkjoin](https://stackoverflow.com/questions/38048860/angular2-rxjs-observable-forkjoin) –

+1

@SurajRao不是一個愚蠢的事情,因爲它不能解釋應該如何區分錯誤真正的價值。但是有關,是的。 – estus

回答

4

RxJS forkJoin的作用與Promise.all相似。如果其中一個源發生錯誤,則生成的源也會拋出。如果它不應該拋出,其誤差應在源被抓的地方被拋出:

Observable.forkJoin(
    this.issuesService.getIssues().catch(err => Observable.of(err)), 
    this.categoryService.getCaretories().catch(err => Observable.of(err)) 
) 

然後錯誤可以像普通值處理:

.subscribe(([issuesRes, categoriesRes]) => { 
    if (issuesRes instanceof Error) ... 
    else ... 
    });