2017-11-19 4 views
-1

나는 true 또는 false를 반환하고 싶습니다. Observable과 비동기식입니다. 따라서 httpclient가 끝날 때까지 기다리는 방법을 잃어 버렸습니다.각도 4 HttpClient Observable

현재 isLogin 호출은 항상 false를 반환합니다.

import { Injectable } from '@angular/core'; 
import { HttpClient , HttpHeaderResponse, HttpHeaders, } from '@angular/common/http'; 
import { Observable } from 'rxjs/Observable'; 
import 'rxjs/add/operator/map'; 
import { Subscription } from 'rxjs/Subscription'; 

class LoginData { 
    UserKey: string; 
    Password: string; 
} 

class TokenData { 
    token: string; 
    datetime: string; 
} 

@Injectable() 
export class Authenticate { 

private Url = 'http://192.168.1.1:6000'; 

    constructor(private http: HttpClient) {} 

    public isLogin(userkey: string, password: string): boolean { 
    const logindata = new LoginData(); 
     logindata.UserKey = userkey; 
     logindata.Password = password; 
    const retval = false; 
    this.http.post<TokenData>(`${this.Url}/login`, logindata, {headers: this.getHeader()}); 
     .subscribe(sub => { 
     if(sub.token) 
     { 
      localStorage.setItem('token',sub.token); 
      retval = true; 
     } 
    }); 
     return retval; 
    } 


} 
+0

콜백 반환 값은 무엇입니까? –

+0

app.component.ts의 my subscription은 this.auth.isLogin ('smith', 's12367')입니다. subscribe ( localStorage.setItem ('token', s.token); this입니다. route.navigateByUrl ('/ mainpage'); }, err => {console.log ('Error :'+ err);}); – AlbertK

+0

데이터 반환 값은 무엇입니까? –

답변

-1

자바 스크립트에서 동기식으로 수행 할 수 없습니다. 의 발신자 코드를 변경해야합니다. 로그인은입니다. 어떤 종류의 콜백을 구현하는 것 외의 다른 방법은 없습니다. 아마 비동기 키워드가 도움이 될 것입니다 기다리고 :

  • 변경 공공 비동기 isLogin에 isLogin의 서명 (userkey : 문자열, 비밀번호 : 문자열) : 약속 < 부울 >.
  • isLogin 안에 ~ promise()을 사용하십시오. . (; 다른} {false를 반환;} (tokenData.token가) {true를 반환하는 경우 tokenData => {)
  • 변경 sinature this.http.post <TokenData> (BLA BLA) .toPromise() 다음과 같은 뭔가 호출자가 비동기이고 을 사용하면 키워드를 기다리는 것입니다. const isLogin : boolean = await component.isLogin ('myname', 'mypwd');