【发布时间】:2019-08-21 07:28:19
【问题描述】:
我有一个史诗,我正在听一个动作流,当'AUTH_STATUS_CHECKED' 的动作发生时切换到一个新的可观察authState(app.auth())。这个新的 observable 告诉我我是否通过了身份验证。
如果 auth observable 返回一个用户,则发送 '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'))
)
)
);
它没有按预期工作。如果没有用户,promise 会被触发,但它不会等待响应,并且 dispatch 永远不会被触发。
我显然是 rxjs 的新手,我无法弄清楚这一点。我浏览了文档并尝试使用 tap() 和 mergeMap() 但得到了同样的错误。
任何指导将不胜感激。
【问题讨论】:
标签: javascript if-statement rxjs rxjs6 redux-observable