运行 在 RxJS Observable flatMap 中等待

Running await inside RxJS Observable flatMap

我正在尝试 return 将一个异步箭头函数内的可观察对象传递给 flatMap,但未调用 returned 可观察对象。

protected buildUseCaseObservable(params: LoginUserParams): Observable<Session> {
        return this.userRepository.getUserByName(params.getUsername())
            .pipe(flatMap(async user => {
                if (!user) {
                    throw new Error(Errors.USER_DOESNT_EXIST);
                }

                const match = await this.cypher.compare(params.getPassword(), user.password);
                if (!match) {
                    throw new Error(Errors.WRONG_PASSWORD);
                }

                return Observable.create((subscriber: Subscriber<Session>) => {
                    subscriber.next(new Session("token test", "refreshToken test"));
                    subscriber.complete();
                });
            }));
    }

有谁知道为什么会这样,我该如何解决?提前致谢。

解决了,我只是把promise变成了observable然后做了flatMap而已。

protected buildUseCaseObservable(params: LoginUserParams): Observable<Session> {
        return this.userRepository.getUserByName(params.getUsername())
            .pipe(flatMap(storedUser => {
                if (!storedUser) {
                    throw new Error(Errors.USER_DOESNT_EXIST);
                }

                return from(this.cypher.compare(params.getPassword(), storedUser.password));
            })).pipe(flatMap(match => {
                if (!match) {
                    throw new Error(Errors.WRONG_PASSWORD);
                }

                return Observable.create((subscriber: Subscriber<Session>) => {
                    subscriber.next(new Session("token test", "refreshToken test"));
                    subscriber.complete();
                });
            }));
    }