首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >角4 HttpClient可观测

角4 HttpClient可观测
EN

Stack Overflow用户
提问于 2017-11-19 03:14:28
回答 1查看 493关注 0票数 0

我有一个身份验证类,我想返回一个true或false,但是使用可观察到的是异步,所以我不知道如何等待httpclient完成。

此时,对isLogin的调用将始终返回false。

代码语言:javascript
复制
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;
    }


}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-19 08:18:30

在javascript中不可能以同步的方式这样做。您必须更改isLogin调用方中的代码。除了实现某种回调之外,没有别的办法了。也许异步和等待关键字会有所帮助:

  • 将isLogin的签名更改为公共异步isLogin(userkey: string,password: string ):isLogin。
  • 在isLogin内部使用toPromise()。类似于this.http.post(bla bla).toPromise().then(tokenData => {if(tokenData.token){返回真;}tokenData{返回false;})
  • 将调用方的符号更改为异步,并使用等待关键字: const isLogin: boolean = await component.isLogin('myname','mypwd');
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47373357

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档