У меня есть эпопея, где я слушаю поток действий, когда происходит действие 'AUTH_STATUS_CHECKED'
, переключаемся на новую наблюдаемую authState(app.auth())
. Эта новая наблюдаемая говорит мне, аутентифицирован ли я или нет.
Если наблюдаемая авторизация возвращает пользователя, тогда отправьте действие 'SIGNED_IN'
с пользователем в качестве полезной нагрузки.
Если пользователь не существует, тогда откажитесь от обещания app.auth().signInWithPopup(googleAuthProvider)
и при получении ответа 'SIGNED_IN'
.
Если есть какие-либо ошибки, поймайте их и сообщите мне в консоли.
основываясь на логике выше, я реализовал конвейер ниже
export const fetchAuthStatus = action$ =>
action$.pipe(
ofType('AUTH_STATUS_CHECKED'),
switchMap(() =>
authState(app.auth()).pipe(
map(user =>
user
? { type: 'SIGNED_IN', payload: user }
: app
.auth()
.signInWithPopup(googleAuthProvider)
.then(user => ({ type: 'SIGNED_IN', payload: user }))
),
catchError(error => console.log('problems signing in'))
)
)
);
Это не работает, как ожидалось. Если пользователя нет, обещание будет выполнено, но оно не будет ждать ответа, и отправка не будет выполнена.
Я явно новичок в rxjs, и у меня возникли проблемы с этим разобраться. Я просмотрел документы и попытался использовать tap () и mergeMap (), но получаю ту же ошибку.
Любое руководство будет оценено.