angular - 以角度订阅的返回值
问题描述
我是角度新手,我已经搜索了很长时间
我有登录方法
login(email: string, password: string): Observable<any> {
//return this.http.post<ServiceResponse>(API_USERS_URL, { email, password });
debugger;
this.http.post<ServiceResponse>(API_USERS_URL, { email, password }).subscribe((response: ServiceResponse) => {
if (response.success) {
const auth = new AuthModel();
auth.accessToken = "access-token-8f3ae836da744329a6f93bf20594b5cc";
auth.refreshToken = "access-token-f8c137a2c98743f48b643e71161d90aa";
auth.expiresIn = new Date(Date.now() + 100 * 24 * 60 * 60 * 1000);
return auth;
}
}, (error: ServiceResponse) => {
console.log(error);
return undefined;
});
}
我使用 subscribe 来检查响应是否成功,如果成功,我返回值,如果不是,我返回 undefined 并记录错误
这里有一个编译错误,我应该返回值,当我在方法末尾添加 return 时,它会在响应来自服务器之前返回
有人可以帮忙吗?
解决方案
我不认为你需要一个可观察的,但你可以使用 RxJs 运算符返回一个可观察的of
(该库已经在你的项目中)
import { of } from 'rxjs';
//...
return of(auth)
或者带有行为主体
new BehaviorSubject<any>(auth)
但我认为这种情况下的好方法是返回一个Promise
return new Promise<any>((resolve , reject) =>{
if(login==true){ resolve(auth) }
if(login==false){ reject() }
})
您的 HTTP 请求只会“发出”一次,这就是为什么不需要 observable 的原因。使用 WebSocket observable 可能更有趣