Angular 如何在订阅后执行某些操作
我想返回一个布尔值,但“if”条件中的变量未定义Angular 如何在订阅后执行某些操作,angular,observable,subscribe,Angular,Observable,Subscribe,我想返回一个布尔值,但“if”条件中的变量未定义 function() { this.menuDataService.getMenu() .subscribe(res => { this.mainMenus = res.MainMenus; console.log(this.mainMenus); }); console.log(this.mainMenus); if(this.mainMenus == 1){
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;
}
}
您可以最终将事件覆盖到可观察的
上,以便调用订阅
this.menuDataService.getMenu()
.finally( () => { console.log(this.mainMenus) });
.subscribe(res =>{
this.mainMenus = res.MainMenus;
console.log(this.mainMenus);
});
一旦你开始使用可观察对象,你就必须在可观察对象之外的方法链中工作。在您的情况下,您可以这样做:
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);
});
}
seescode的回答对我有帮助,但我不能对此发表评论
我只是想说,在RxJS 6中,他们链接可观察操作符的方式发生了变化,我们现在必须使用管道(…)方法。(见附件)
以下是更新到RxJS 6的InnerFunc的外观:
function InnerFunc(){
return this.menuDataService.getMenu().pipe(
map(res => {
if(res.mainMenus == 1){
return true;
}
else{
return false;
}
)
)
}
为什么不在第一个console.log之后立即编写它呢subscribe
?为什么不在finally中使用subscribe
?的第三个回调呢..它是非线性的。实际上,我想处理在subscribe中接收的数据,基于该数据,我想返回一个布尔值,我不能在subscribe中完成整个代码,因为值不会从中反映出来subscribe@MohdFaisalAnsari最终,在收到/拒绝每个流事件后,我们都会被调用,您到底需要什么?@Dhyey我假设最终
和第三次
订阅回调也会做同样的事情,因此,最后使用
使其更具可读性(IMO;)