2017-09-20 3 views
0

나는 이것을 알아낼 수 없습니다. DataService (a.k.a. ds) 및 구성 요소가 있습니다. 이 구성 요소는 doUserExist() 함수를 호출합니다.각도 4 함수를 반환 부울 ​​= 정의되지 않았습니다

console.log("boolean="+this.ds.doesUserExist()); 

항상 정의되지 않은 것으로 표시됩니다.

doesUserExist(){ 
    var bool:boolean; 
    var myvars = this.af.list('/accounts/'+this.uid) as FirebaseListObservable<Listing[]>; 

    myvars.subscribe(data=>{ 
      console.log("length="+data.length) 
      if (data.length===0){ 
      bool = false;   
      }  
     }) 
     return bool; 

     } 

나도 공용 변수로 var bool:boolean을 퍼팅 시도하지만, 무슨 일이 있더라도,이 정의되지 않은 온다 : 여기 DataService에있는 기능입니다.

는 또한 var bool:boolean=true 설정하고 부울 다시 여전히 위의 지정에 따라 truefalse로 오는 대신에 (내가 CONSOLE.LOG를 통해 확인했습니다) 위의 if 문에서 거짓과 동일 할 것이다.

그래서 내가 뭘 잘못하고 있니? 나는 주위를 검색 한 내가 시도 :

Boolean([return bool])하지만 코드 나뿐만 아니라 if 문에 returns을 퍼팅 시도하는

을 좋아하지 않는다. 그건 작동하지 않습니다.

감사합니다.

+1

가능한 중복 https://stackoverflow.com/questions/43055706/how-do-i-return-the -response-from-observable-http-async-call-in-angular2) – n00dl3

답변

0

당신은 bool을 정의하지 않았으며 구독을 통해 전달하지 않습니다 (비동기이므로 응답이 나중에 올 수도 있습니다). bool을 반환하면 값이 없습니다.

함수가 응답 길이를 기반으로하므로 해당 부울을 제거 할 수 있습니다.

doesUserExist(): Observable<boolean> { 
    var myvars = this.af.list('/accounts/'+this.uid) as FirebaseListObservable<Listing[]>; 

    return myvars.subscribe(data=>{ 
     console.log("length="+data.length) 
     return data.length === 0; // true if that's the case, or false 
    }) 
    } 
[내가 angular2 피 감시/HTTP/비동기 호출의 응답을 반환합니까?] (의
+0

'doesUserExist' 함수가 무언가를 반환하는지 모르겠다 – yurzui

+0

반환 값을 잊어 버려서 고마워! –

+0

예, 그게 내가 부린을 true로 설정 한 것입니다.하지만 IF 문이 false로 변경 되더라도 관계없이 true로 반환됩니다. 당신은 데이터가 비동기라고 언급했습니다. 이 사이트가 제대로 작동하려면 몇 초가 필요할 수도 있습니다. 또는 (내 대답을 생각한 후) 데이터 서비스로부터 응답을 받기 전에 해당 함수가 요청되고 해당 구성 요소에 대해 조치를 취하는 것이 더 낫습니까? – Groovdafied

관련 문제