Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 如何在订阅后执行某些操作_Angular_Observable_Subscribe - Fatal编程技术网

Angular 如何在订阅后执行某些操作

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){

我想返回一个布尔值,但“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;
    }
}

您可以最终将事件覆盖到可观察的
上,以便调用
订阅

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;)