2017-01-28 8 views
9

I wdrożyliśmy if jak tenangular2 czekać aż do zaobserwowania w wykończeniach jeśli warunek

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

tym jeśli warunek czeka na odpowiedź od zaplecza. Ale zanim obserwowalne zostanie wykonane, przechodzi do instrukcji else i kończy warunek bez sprawdzania warunku if na starcie.

to moje obserwowalne metoda, aby uzyskać dane z backend

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

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

Więc jak wprowadzić warunek czeka, aż dostanie odpowiedź od backend

Odpowiedz

14

Nie można czekać na Observable lub Promise, aby zakończyć. Możesz go zasubskrybować, aby otrzymywać powiadomienia po ukończeniu lub emisji wydarzenia.

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

wtedy można zrobić

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

ale jeśli rozmówca tego kodu zależy również od wartości zwracanej ponownie trzeba

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

a następnie wykonaj subscribe() gdzie zadzwonić ten kod

+0

Mam już zaimplementowaną mapę. Jest to spowodowane wykonaniem warunku else d przed wykonaniem funkcji check() finshe. Więc zawsze chodzi o inny warunek: – kohli

+0

, ponieważ kod musi znajdować się wewnątrz 'map (...)', 'subscribe (...)' lub dowolnego innego obserwowalnego operatora. –

Powiązane problemy