您好我正在尝试使用http请求的结果执行某些操作,但我的回调永远不会执行,我无法解决为什么...
这是我的代码:
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import * as moment from "moment";
import 'rxjs/add/operator/do';
import 'rxjs/add/operator/shareReplay';
@Injectable()
export class AuthdataService {
constructor(private http: HttpClient) {}
login(email: string, password: string) {
return this.http
.post("http://localhost:3000/user/login", {
email,
password
})
.do(res => this.setSession)
.shareReplay();
}
private setSession(authResult) {
console.log("Why am I not being hit???")
const expiresAt = moment().add(authResult.expiresIn,'second');
localStorage.setItem('id_token', authResult.idToken);
localStorage.setItem("expires_at", JSON.stringify(expiresAt.valueOf()) );
}
}
更新了解决方案:
login(email: string, password: string) {
return this.http
.post("http://localhost:3000/user/login", {
email,
password
})
.do(res => this.setSession(res))
.shareReplay();
}
答案 0 :(得分:2)
您期望正在创建的Observable
序列为“热门”,而是“冷”。差异用elsewhere on the internet来描述,比我能管理得更好。
换句话说,.post
在订阅之前实际上并没有做任何事情。 Reference
调用shareReplay
不会订阅Observable
,但只会确保一次只能创建对基础Observable
的一个订阅。
因此,缺少的链接可能是您在.subscribe
上创建的Observable
。