从http服务Angular返回自定义值

时间:2019-06-28 14:11:14

标签: angular

我想要做的就是直接在组件中执行以下操作:

if(exampleService.checkValidityOfToken()) { //do something }  

下面是exampleService中的相应方法。不确定我是否没有以正确的方式返回或我没有以正确的方式检索返回的值。您能在这方面纠正我吗?

 checkValidityOfToken(){
    let httpOptions = {
      headers: new HttpHeaders({
        'Access-Token': localStorage.getItem("token")
      })
    }
     return this.http.post(environment.tokenUrl,null,httpOptions).subscribe((res)=>{
       return true;
     },(err)=>{
       return false;
     })
}

3 个答案:

答案 0 :(得分:0)

checkValidityOfToken方法返回一个 Subscription ,不正确地将其用作布尔值,您必须将订阅从服务移至调用checkValidityOfToken的组件,这将为您提供对成功产生不同副作用的可能性 如果您想获取已订阅的返回值,并且//根据订阅中的返回值进行一些操作:

checkValidityOfToken(){
 let httpOptions = {
  headers: new HttpHeaders({
    'Access-Token': localStorage.getItem("token")
  })
 }
 return this.http.post(environment.tokenUrl,null,httpOptions); // this will return an Observable
}

然后您只需在组件中调用

this.exampleService.checkValidityOfToken().subscribe((res)=>{
   // do something 
 },(err)=>{
   return false;
 })

如果您需要护卫

canActivate(): Observable<boolean>{
    return this.exampleService.checkValidityOfToken().pipe(
      map(response => {
            return true;
     }),
     catchError((err) => return of(false))
    )
}

答案 1 :(得分:0)

其他命题正在使用 toPromise()函数将可观察到的承诺转换为诺言,并像这样使用 await / async

if(await exampleService.checkValidityOfToken()) { //do something } 


async checkValidityOfToken(){
    let httpOptions = {
      headers: new HttpHeaders({
        'Access-Token': localStorage.getItem("token")
      })
    }
     return this.http.post(environment.tokenUrl,null,httpOptions).toPromise()
}

答案 2 :(得分:0)

您可以执行以下操作

在构造函数之前和构造函数中,放置以下内容

public option: RequestOptions;
    constructor(private _http: Http, private envirment: EnvironmentService) {
        const headers = new Headers({ 'Content-Type': 'application/json; charset=UTF-8','Access-Token': localStorage.getItem("token") });
        this.option = new RequestOptions({ headers: headers });
    }

您以这种方式返回方法

您以这种方式返回方法

MethodOfService () {
        this.url = this.envirment.Url + '/rulMetodoConsumible';
        return this.http.post(environment.tokenUrl,null,httpOptions).pipe(map(res => res.json()));

    }

在组件中您可以这样称呼

this.variableService.MethodOfService().subscribe(
        result => { 
      // in the result variable the data sent by the service arrives
},
error => {
          this.loading = false;
          console.error('Guardar natural - ' + error);
        });