我的App.component
在我的user service
中調用init方法。在組件初始化之前加載數據 - angular 2
ngOnInit(){
this.init(true).then(data => {
console.log("OnInit Called")
})
}
User.service
返回promise
這反過來又調用account.init
init = (isRegistered) => {
return new Promise((resolve, reject) => {
this.account.init(isRegistered).then(data => {
//some data inialization
console.log("OnInit Called User Service")
});
});
}
Account.service
返回使用Observable
.forkJoin
init = ((userType: boolean) => {
return new Promise((resolve, reject) => {
Observable.forkJoin([
this.m1,
this.m2]).subscribe(data => {
//persist those return data
});
});
}
- 爲什麼都控制檯承諾其調用幾個服務。日誌語句從不得到執行?
- 爲什麼它在Observable.forkJoin完成其服務調用之前不阻止組件初始化?
你一直都是對的,但實際上你可以做一個同步服務器調用,所以可以阻止執行:)這是沒有意義的,但它可能是 – smnbbrv
好吧,我認爲這已被棄用,但它仍然是有爭議的這確實阻礙了執行。它只是佔用UI線程 - for循環可以做同樣的事情,但正如你所說的 - 無論如何,完全沒有意義:D –
:) for循環可以阻止執行,但它永遠無法接收異步調用的結果,因爲它將被推送到事件隊列。阻止執行直到收到異步響應的唯一方法是ES6生成器或異步/等待...仍然毫無意義:D – smnbbrv