2016-08-02 72 views
0

我有以下代碼記錄:"foo2"然後"foo1"同步嵌套訂閱在angular2

a() { 
    b().then(() => { 
    console.log("foo2") 
    }) 
} 

b() { 
    return webServiceCall().do(() => { 
     webServiceCall2().subscribe(() => { 
     console.log("foo1")  
     }) 
    }) 
} 

我想確保我的foo1foo2之前出現。

我該如何解決這個問題?謝謝 !

回答

1

如果您使用鏈接的承諾,您可以確定foo1出現在foo2之前。

如果webServiceCall1webServiceCall2事項的順序:

b() { 
    return webServiceCall1().then(() => { 
     return webServiceCall2().then(() => { 
      console.log("foo1") 
     }) 
    }) 
} 

如果webServiceCall1webServiceCall2的順序並不重要,使用Observable.forkJoin

b() { 
    return Observable.forkJoin(webServiceCall1,webServiceCall2).toPromise().then(() => { 
     console.log("foo1"); 
    }); 
} 
+0

比方說,我有webServiceCall3也存在在我的webServiceCall1(在webServiceCall2之後被調用),那麼我必須以相同的方式在webServiceCall2中移動它?這實際上會使一切順序。 – Scipion

+0

看看我的編輯 – Christoph

+0

輝煌,但是forkJoin可以使用兩個以上的參數嗎?就像我有一個webServiceCall3一樣,我可以做forkJoin(wSC1,wSC2,wSC3)嗎? – Scipion