2017-07-06 83 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); 
    });  
} 
相关问题