2017-10-10 43 views
1

我有一種情況,我的應用需要從後端獲取一些數據,然後用這些數據處理幾個步驟。 我會實現是一樣的東西有角度的http - 有條件退出的鏈式觀察點

this.http.get('myurl') 
      .map(data => doFirstProcessingStep(data)) 
      .map(data1 => doSecondProcessingStep(data)) 
      .map(data2 => doThirdProcessingStep(data)) 

萬一雖然後端不發送有效的數據,我想退出加工鏈條,無需執行任何步驟,而直接返回一個Observable.of(null)

哪個一個優雅的方式來實現這樣的邏輯?

+0

如果服務返回一個錯誤,你應該趕上。否則,請考慮使用過濾器 – methgaard

+0

這不是必需的錯誤。後端可以返回一組空白的數據。你能否提供更多關於如何應用過濾器的細節? – Picci

回答

1

如果使用新的HttpClient,你的反應是自動轉換爲JSON。而且,如果您的後端返回一個空的響應,幕後發生的JSON.parse將引發錯誤。

在Observable鏈中,如果發生錯誤,它會跳過鏈中的其他所有運算符,直至找到catch。所以它肯定應該按照預期的方式工作:

this 
    .http 
    .get('myurl') 
    .map(data => doFirstProcessingStep(data)) 
    .map(data1 => doSecondProcessingStep(data)) 
    .map(data2 => doThirdProcessingStep(data)) 
    .catch(err => Observable.of(null)) 
0

你可以像下面:

this.http.get('myurl') 
    .map(data => this.doAllProcessing(data)); 

doAllProcessing(data) { 
    if (!dataIsValid(data)) { 
     return null; 
    } 
    data = doFirstProcessingStep(data); 
    data = doSecondProcessingStep(data); 
    data = doThirdProcessingStep(data); 

    return data; 
}