返回promise并从中创建observable时,Typescript Angular2错误 [英] Typescript Angular2 errors when returning a promise and creating an observable from it
问题描述
我正在尝试从 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屋!