web-dev-qa-db-fra.com

Comment exécuter quelque chose après s'inscrire en angulaire

Je veux renvoyer une valeur booléenne, mais la variable dans la condition "if" n'est pas définie. 

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;
    }
}
4
kzrfaisal

Une fois que vous commencez à utiliser des observables, vous devez travailler avec l'ensemble des méthodes enchaînées de l'observable. Dans votre cas, vous pourriez faire quelque chose comme ça:

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

Vous auriez enfin pu finir événement observable, de sorte que subscription soit appelé.

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

la réponse de seescode m'a aidée mais je ne peux pas la commenter.

Je voulais juste dire qu'avec RxJS 6, la méthode d'enchaînement des opérateurs observables a changé et nous devons maintenant utiliser la méthode pipe (...). (voir RxJS 6 - Qu'est-ce qui a changé? Quoi de neuf? )

Voici à quoi ressemblerait son InnerFunc mis à jour vers RxJS 6:

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