返回promise并从中创建observable时,Typescript Angular2错误 [英] Typescript Angular2 errors when returning a promise and creating an observable from it

查看:211
本文介绍了返回promise并从中创建observable时,Typescript Angular2错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试从 getToken()中的ionics storage 中检索令牌,而不是在<$中使用它c $ c> refreshToken()通过将令牌传递给(this.jwtHelper.isTokenExpired(this.token)来查看令牌是否已过期返回true或false,具体取决于令牌是否已过期。我已将注释放在 refreshToken()中,我收到以下错误

I am attempting to retrieve a token from ionics storage in getToken()and than use it in refreshToken() to see if the token is expired by passing it to (this.jwtHelper.isTokenExpired(this.token) which returns a true or false depending on if the token is expired or not. I have put comments in refreshToken() where I am getting the following errors

错误1:

错误:TS2345:类型'(响应:响应)=> void'的参数不能分配给'(value:Response)=> void'类型的参数。
参数'response'和'value'的类型不兼容。
类型'Response'不能分配给'响应'。存在两个具有此名称的不同类型,但它们不相关。
响应类型中缺少属性正文。

错误2:

错误:(34,46)TS2339:typ上不存在属性'令牌' e'承诺<任何>'。

我的代码

import {AuthHttp, JwtHelper, tokenNotExpired} from "angular2-jwt";
import {Observable} from "rxjs/Observable";
import {AuthService} from "../Services/Auth/auth.service";
import {Injectable} from "@angular/core";
import { Storage } from '@ionic/storage';
import {AlertController} from "ionic-angular";

@Injectable()
export class TokenProvider {

jwtHelper: JwtHelper = new JwtHelper();
token;

constructor(private authHttp: AuthHttp, private storage: Storage, private alertCtrl: AlertController) {
}

getToken(): Promise<any> {
  return this.storage.get('token').then(token => {
     this.token = token;
  });
}

refreshToken(): Observable<any> {

  return this.token = Observable.fromPromise(this.getToken())
    .flatMap(() => {
      if(this.jwtHelper.isTokenExpired(this.token))
      {
        return this.authHttp.get('localhost.api/refresh')
          .subscribe(   // ERROR 1 HERE
            (response: Response) => {
              this.token = response.json().token;  // ERROR 2 HERE
            },
            (error: Response) => {
              console.log(error);
            });
      }
    });
}


推荐答案

您没有导入代码中的响应。编译器可能会对使用哪个 Response 感到困惑,因为您的打字中可能有多个定义:

You are not importing Response in your code. The compiler probably got confused on which Response to use as there may be multiple definitions in your typings :

import { Response } from '@angular/http';

此外,您没有返回 flatMap内的observable 。您将返回订阅。像这样返回原始的observable:

Also, you are not returning the observable inside flatMap. You are returning the Subscription. Return the original observable like this:

refreshToken(): Observable <any> {

    let observable = Observable.fromPromise(this.getToken())
     .filter(() => this.jwtHelper.isTokenExpired(this.token))
     .flatMap(() =>  this.authHttp.get('localhost.api/refresh'));
    observable.subscribe((response: Response) => {
            this.token = response.json().token;
        }, (error: Response) => {
            console.log(error);
        });
    return observable;
}

这篇关于返回promise并从中创建observable时,Typescript Angular2错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆