![](/img/trans.png)
[英]TypeError: Cannot read property 'map' of undefined with Angular v6
[英]Angular v6 pipe(map()) issue
如果有人可以對此有所闡明,我將不勝感激。 我已經去了好幾天了。
這是我的身份驗證服務中存在的兩個函數。 登錄函數先檢索有效的jwt,然后再刷新函數以獲取刷新的jwt。
登錄
login(username: string, password: string): Observable<any> {
const headers = new HttpHeaders().set('Authorization', `Basic ${environment.WSO2_AUTH_BASIC}`);
const params = new HttpParams({
fromObject: {
grant_type: 'password',
scope: 'openid',
username: username,
password: password
}
});
return this.http.request<Token>('POST', environment.API_HOST + '/token', {
headers: headers,
body: params
}).pipe(map(this._mapTokenResponse));
}
刷新
private _refreshToken() {
const headers = new HttpHeaders().set('Authorization', `Basic ${environment.WSO2_AUTH_BASIC}`);
this.token = this.getToken();
const params = new HttpParams({
fromObject: {
grant_type: 'refresh_token',
scope: 'openid',
refresh_token: this.token.refresh_token
}
});
return this.http.request<Token>('POST', environment.API_HOST + '/token', {
headers: headers,
params: params
}).pipe(map(this._mapTokenResponse, this));
}
我創建了一個單獨的箭頭函數來處理兩者的映射。
private _mapTokenResponse = (token: Token) => {
// login successful if there's a jwt token in the response
if (token && token.access_token) {
// store user details and jwt token in local storage to keep user logged in between page refreshes
token.id_token_data = this.jwtHelper.decodeToken(token.id_token);
this._setSession(token);
}
return token;
}
我想要這樣做,以便不重復代碼。 登錄功能運行正常,但刷新令牌返回此錯誤:
ERROR Error: "Uncaught (in promise): TypeError: argument is not a function. Are you looking for `mapTo()`?
我已經從'rxjs / operators'導入了地圖
您可以執行以下操作:
return this.http.request<Token>('POST', environment.API_HOST + '/token', {
headers: headers,
body: params
}).pipe(
map(this._mapTokenResponse.bind(this))
);
我們使用.bind(this)
設置函數調用的范圍(“ this”)。 否則,每次調用都會出錯this.
在您的回調函數中。
要么:
return this.http.request<Token>('POST', environment.API_HOST + '/token', {
headers: headers,
body: params
}).pipe(
map((token: Token) => this._mapTokenResponse(token))
);
我認為這種解決方案更加干凈。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.