如何从Promise返回Observable<T>?

问题描述 投票:0回答:1

我尝试从以下方法返回 authResult 但看起来所有执行路径都不返回值。

这是我的方法:

 public loginWithFacebook():  Observable<AuthResult> {
        this.fbService.login().then((authResponse: any) => {
            const accessToken = authResponse.accessToken;    
            return   this.model.loginWithFacebook(accessToken).pipe(tap(res => this.setSession(res)), shareReplay());         
          
          });         
      } 

这是错误消息:

声明类型既不是“undefined”、“void”也不是“any”的函数必须返回一个值。

如何重写它以返回 Observable?

感谢您的关注。

angular typescript
1个回答
0
投票

您可以使用 rsjx from

将承诺转换为可观察的
import { from, Observable } from 'rxjs';
import { switchMap, tap, shareReplay } from 'rxjs/operators';

public loginWithFacebook(): Observable<AuthResult> {
    return from(this.fbService.login()).pipe(
        switchMap((authResponse: any) => {
            const accessToken = authResponse.accessToken;
            return this.model.loginWithFacebook(accessToken);
        }),
        tap(res => this.setSession(res)),
        shareReplay()
    );
}
© www.soinside.com 2019 - 2024. All rights reserved.