错误类型:无法添加属性0,对象不可扩展(ngrx / firebase / angularfire)

发布于 2025-01-31 15:54:34 字数 2427 浏览 4 评论 0原文

我知道这个问题已经在Stackoverflow上进行了多次报道,但是没有回答这些问题。我已经阅读了所有评论,但是我仍然不明白它与我的代码有何关系。

我正在尝试使用AngularFire中的setDoc添加一个用户文档:

firebase.service.ts

  public addUserDocument(userId: string, data: UserDocument) {
   const usersRef = doc(this._fireStore, 'users', userId);
    return from(setDoc(usersRef, {...data}));
  }

我在我的ngrx效果中正在调用adduserDocument

auth.effects.ts

  authSignUp$ = createEffect(
    () =>
      this._actions$.pipe(
        ofType(authSignUp),
        switchMap((formData) =>
          this._firebaseService.signUp(formData.email, formData.password).pipe(
            map(response => ({
              user: response.user,
              displayName: formData.displayName
            }))
          )
        ),
        map(data =>  authSignUpSuccess(data))
      ),
  );

  authSignUpSuccess$ = createEffect(() =>
    this._actions$.pipe(
      ofType(authSignUpSuccess),
      switchMap(data => {
        console.log("adding doc")
        return this._firebaseService.addUserDocument(data.user.uid, {
          metaData: {
            isOnboarded: false
          }
        });
      }),
    ), { dispatch: false });

尝试注册时,我会得到以下供应商错误

ERROR TypeError: Cannot add property 0, object is not extensible
    at Array.push (<anonymous>)
    at ObserverProxy.subscribe (vendor.js:62785:20)
    at AuthImpl.registerStateListener (vendor.js:6441:27)
    at AuthImpl.onIdTokenChanged (vendor.js:6294:17)
    at AuthInterop.addAuthTokenListener (vendor.js:15609:35)
    at o (vendor.js:32582:87)
    at vendor.js:32585:24
    at Provider.onInit (vendor.js:127253:7)
    at J.start (vendor.js:32585:12)
    at new $a (vendor.js:51436:295)

但是,如果我在authsignup $的内部执行所有操作效果和管道响应,它可以正常工作:

  authSignUp$ = createEffect(
    () => 
    this._actions$.pipe(
      ofType(authSignUp),
      switchMap(
        formData => this._firebaseService.signUp(formData.email, formData.password).pipe(
          tap((response) => this._firebaseService.addUserDocument(response.user.uid, {
            metaData: {
              isOnboarded: false
            }
          }
            ))
        )
      )
    ),
    {dispatch: false}
  );

供应商软件包有问题,还是我的代码有问题?

非常感谢您的帮助。

I am aware that this issue has been reported several times on StackOverflow, but none of the questions has been answered. I have read all of the comments, but I can still not understand how it relates to my code.

I am trying to add a user document to Firestore using setDoc from AngularFire:

firebase.service.ts

  public addUserDocument(userId: string, data: UserDocument) {
   const usersRef = doc(this._fireStore, 'users', userId);
    return from(setDoc(usersRef, {...data}));
  }

I am calling the addUserDocument in my NgRx effects.

auth.effects.ts

  authSignUp$ = createEffect(
    () =>
      this._actions$.pipe(
        ofType(authSignUp),
        switchMap((formData) =>
          this._firebaseService.signUp(formData.email, formData.password).pipe(
            map(response => ({
              user: response.user,
              displayName: formData.displayName
            }))
          )
        ),
        map(data =>  authSignUpSuccess(data))
      ),
  );

  authSignUpSuccess$ = createEffect(() =>
    this._actions$.pipe(
      ofType(authSignUpSuccess),
      switchMap(data => {
        console.log("adding doc")
        return this._firebaseService.addUserDocument(data.user.uid, {
          metaData: {
            isOnboarded: false
          }
        });
      }),
    ), { dispatch: false });

When trying to sign-up I get the following vendor error:

ERROR TypeError: Cannot add property 0, object is not extensible
    at Array.push (<anonymous>)
    at ObserverProxy.subscribe (vendor.js:62785:20)
    at AuthImpl.registerStateListener (vendor.js:6441:27)
    at AuthImpl.onIdTokenChanged (vendor.js:6294:17)
    at AuthInterop.addAuthTokenListener (vendor.js:15609:35)
    at o (vendor.js:32582:87)
    at vendor.js:32585:24
    at Provider.onInit (vendor.js:127253:7)
    at J.start (vendor.js:32585:12)
    at new $a (vendor.js:51436:295)

However, if I do everything inside of the authSignUp$ effect and pipe the response, it works just fine:

  authSignUp$ = createEffect(
    () => 
    this._actions$.pipe(
      ofType(authSignUp),
      switchMap(
        formData => this._firebaseService.signUp(formData.email, formData.password).pipe(
          tap((response) => this._firebaseService.addUserDocument(response.user.uid, {
            metaData: {
              isOnboarded: false
            }
          }
            ))
        )
      )
    ),
    {dispatch: false}
  );

Is there something wrong with the vendor package, or is there something wrong with my code?

Thank you very much for your help.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文