Запуск в ожидании внутри RxJS Observable flatMap - PullRequest
0 голосов
/ 31 декабря 2018

Я пытаюсь вернуть наблюдаемое внутри функции асинхронной стрелки, переданной в flatMap, но возвращаемая наблюдаемая не вызывается.

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();
                });
            }));
    }

Кто-нибудь знает, почему это происходит и как я могу решитьЭто?Заранее спасибо.

1 Ответ

0 голосов
/ 31 декабря 2018

Решено, я просто превратил обещание в наблюдаемое и сделал плоскую карту.

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();
                });
            }));
    }
...