2017-06-06 60 views
1

我下面加ConcatMap所中斷時錯誤在一個可觀察

`Observable.from(modifiedNodes) 
         .concatMap(node => { 

          return this.Model.setData(node); 
         }) 
         .subscribe(
         () => { 
          NodeSaved++; 
         }` 

這裏我的代碼,如果使用setData拋出錯誤任何中間節點,節點的下一個序列都沒有得到恢復。我們如何修改它,以便即使一個節點發生錯誤,也會執行下一個節點序列。我讀了'onerrorResumeNext',但不知道如何在這裏使用它? 任何幫助將是有用的。

使用setData()是:

public setData(node: INode): Observable<Object>{} 
+0

答案將取決於什麼'setData'回報,所以你應該包括至少在問題上簽名。 – cartant

+0

@cartant我添加了setdata()的簽名。感謝您的回覆 – HardRocker

回答

2

如果setData返回可觀察到的,你可以使用catch操作。這將收到內setData從出現的任何錯誤,如果你返回一個空觀察到的,concatMap將移動到下一個節點的順序:

import 'rxjs/add/observable/empty'; 
import 'rxjs/add/operator/catch'; 

Observable 
    .from(modifiedNodes) 
    .concatMap(node => this.Model 
    .setData(node) 
    .catch(error => Observable.empty()); 
) 
    .subscribe(() => { NodeSaved++; }); 
+0

感謝您的幫助。唯一的是我無法找到empty()方法的observable,而是使用了Observable.of(),它爲我工作。 – HardRocker

+0

也爲'empty'添加了導入。 – cartant

相關問題