2016-08-02 73 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