2017-01-28 4 views
9

ich eine if-Anweisung wie dieseangular2 warten, bis beobachtbaren beendet, wenn Bedingung

if (this.service.check()) { 
     return true; 
    } 
    else { 
} 

dieser, wenn die Bedingung wartet auf eine Antwort vom Backend implementiert haben. Aber bevor das Observable ausgeführt wird, geht es in die else-Anweisung und beendet die Bedingung, ohne die if-Bedingung beim Start zu überprüfen.

dies ist mein beobachtbaren Methode die Daten aus Backend

public check(){ 
     this.getActorRole().subscribe(
     (resp => { 
      if (resp == true){ 
      return true 
     } 

     }), 
     (error => { 
      console.log(error); 
     }) 
    ); 
    } 
} 

So zu bekommen, wie die Bedingung wartet machen, bis er die Antwort vom

Backend bekommt

Antwort

14

Sie können nicht für eine Observable warten oder Promise abzuschließen. Sie können es nur abonnieren, um benachrichtigt zu werden, wenn es ein Ereignis abschließt oder ausstrahlt.

public check(){ 
    return this.getActorRole() // <<<=== add return 
    .map(resp => { 
      if (resp == true){ 
      return true 
     } 
    ); 
    } 
} 

dann können Sie tun

this.service.check().subscribe(value => { 
    if (value) { 
    return true; 
    } 
    else { 
    } 
} 

aber, wenn der Anrufer dieses Codes auch auf den Rückgabewert hängt müssen Sie sich erneut

this.service.check() 
.map(value => { 
    if (value) { 
    return true; 
    } 
    else { 
    } 
} 

und tun dann die subscribe() wo Sie anrufen Dieser Code

+0

Ich habe bereits die .map implementiert das Problem ist, es wird die else Bedingung ausführen d vor der check() -Funktion die Ausführung von finshe. Es geht also immer zur else-Bedingung – kohli

+0

, weil der Code innerhalb einer 'map (...)', 'subscribe (...)' oder eines anderen beobachtbaren Operators sein muss. –

Verwandte Themen