首页 > 解决方案 > 以角度订阅的返回值

问题描述

我是角度新手,我已经搜索了很长时间

我有登录方法

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 时,它会在响应来自服务器之前返回

有人可以帮忙吗?

标签: angulartypescript

解决方案


我不认为你需要一个可观察的,但你可以使用 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 可能更有趣

在此处输入图像描述

来自Promise 与 Observable


推荐阅读