web-dev-qa-db-ja.com

angularでサブスクライブした後に何かを実行する方法

ブール値を返したいのですが、「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;
    }
}
7
kzrfaisal

オブザーバブルの使用を開始したら、オブザーバブルの一連の一連のメソッド内で作業する必要があります。あなたの場合、次のようなことができます:

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);
  });    
}
3
seescode

seescodeの答えは私を助けましたが、コメントすることはできません。

RxJS 6では、Observableオペレーターをチェーンする方法が変わったと言いたかったので、今度はpipe(...)メソッドを使用する必要があります。 ( RxJS 6-変更点?新機能? を参照)

RxJS 6に更新された彼のInnerFuncは次のようになります。

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

observableを介して最終的にイベントが発生する可能性があるため、subscriptionが呼び出されます。

this.menuDataService.getMenu()
.finally( () => { console.log(this.mainMenus) });
.subscribe(res =>{
   this.mainMenus = res.MainMenus;
   console.log(this.mainMenus);
});
1
Pankaj Parkar