无法使用 Ngrx 读取未定义的属性“firebaseApp”
Posted
技术标签:
【中文标题】无法使用 Ngrx 读取未定义的属性“firebaseApp”【英文标题】:Cannot read property 'firebaseApp' of undefined using Ngrx 【发布时间】:2019-02-06 01:33:55 【问题描述】:分配完整 Firebase 身份验证返回时出错
我正在登录我的应用程序,一旦登录成功,我就会调用一个操作来更改我的应用程序的状态,以接收 Firebase 身份验证的经过身份验证的用户的数据。
当我尝试将整个对象传递给user
时,会出现以下错误:
ERROR TypeError: Cannot read property 'firebaseApp' of undefined
at Object.get [as app] (http://localhost:4200/vendor.js:165544:31)
at http://localhost:4200/vendor.js:193044:9
at Array.forEach (<anonymous>)
at deepFreeze (http://localhost:4200/vendor.js:193041:33)
当我在操作中使用从 Firebase 服务器返回的整个对象启动 constructor(user: any)
时,就会发生这种情况。
但是,如果我使用:(id, displayName, email)
访问对象的其他属性,则不会发生此错误,仅当我尝试分配返回的整个对象时才会发生此错误。
auth.effets.ts
@Effect()
loginAction$: Observable<Action> = this._actions$
.ofType(authActions.ActionsTypes.LOGIN_REQUESTED).pipe(
map((action: authActions.LoginCompletedAction) => action.payload),
switchMap(payload => this._authService.loginWithEmailAndPassword(payload.user).pipe(
map((res) => (new authActions.LoginCompletedAction(new authActions.AuthUserPayload(res.user)))),
catchError((error) => of(new authActions.AuthErrorAction( error: error )))
))
);
res.user -> ERROR OCCURS(调用方法时返回 Firebase signInWithEmailAndPassword(电子邮件,密码))
res.user.displayName -> 这样就不会发生错误并且 displayName 使用 Ngrx 在身份验证状态下添加。
auth.actions.ts
// ... omitted
export class AuthUserPayload
constructor(public user: any)
console.log(user);
// I have the feedback but the error occurs.
// the error just does not happen when I do not assign the entire user object.
app.module.ts:
AngularFireModule.initializeApp(environment.firebase),
AngularFireAuthModule,
AngularFirestoreModule.enablePersistence(),
AngularFireDatabaseModule
【问题讨论】:
【参考方案1】:对我来说,这个问题似乎是与 storeFreeze 的冲突。从我的 metaReducers 中删除它可以消除错误。我没有进一步研究它。
【讨论】:
如果您尝试返回包含未格式化数据的 Promise 并产生错误,则只需提取所需的一个。以上是关于无法使用 Ngrx 读取未定义的属性“firebaseApp”的主要内容,如果未能解决你的问题,请参考以下文章
无法使用 Ngrx 读取未定义的属性“firebaseApp”
Firebase 函数:无法读取未定义的属性“user_id”
无法读取未定义类型错误的属性“推送”:无法读取未定义错误的属性“推送”