2017-07-06 124 views
3

我想返回一個布爾值,但「if」條件中的變量未定義。如何在角度訂閱後執行某些操作

function(){ 
this.menuDataService.getMenu() 
.subscribe(res =>{ 
    this.mainMenus = res.MainMenus; 
    console.log(this.mainMenus); 
}); 

console.log(this.mainMenus); 

if(this.mainMenus == 1){ 
    return true; 
} 
else{ 
    return false; 
} 

}

+0

爲什麼不在第一個console.log內'subscribe'後立即寫入? – Dhyey

回答

0

你可以有終於結束了observable事件,讓subscription接到電話。

this.menuDataService.getMenu() 
.finally(() => { console.log(this.mainMenus) }); 
.subscribe(res =>{ 
    this.mainMenus = res.MainMenus; 
    console.log(this.mainMenus); 
}); 
+0

爲什麼不使用'subscribe'的第三個回調? – Dhyey

+1

最後..它的未來undefined – kzrFaisal

+0

其實我想要在訂閱中接收到的數據,基於那個數據我想要返回一個布爾值,我不能在訂閱中做這個整個代碼,因爲值不會反映出來訂閱 – kzrFaisal

2

一旦你開始使用observables,你必須在可觀察對象的鏈式方法集內工作。在你的情況下,你可以這樣做:

function InnerFunc(){ 
    return this.menuDataService.getMenu() 
    .map(res => { 
    if(res.mainMenus == 1){ 
    return true; 
    } 
    else{ 
    return false; 
    } 
) 
} 

function OuterFunc() { 
    InnerFunc() 
    .subscribe(result =>{ 
     // will be either true or false 
     console.log(result); 
    });  
} 
相關問題