как прекратить работу канала в @ ngrx / Effects? - PullRequest
0 голосов
/ 29 августа 2018

В приведенном ниже коде я получаю длину коллекции, наблюдаемую из Firestore.

getUserCartLength(uid:string){
    return this.db.collection('users/'+uid+'/cart').valueChanges()
        .pipe(
            map(docs=>{return docs.length})
        )
}

И этот метод доступен через @ ngrx / effect следующим образом

@Effect()
userExist$ = this.actions$.ofType(UserAuthTypes.YES_USER_EXIST).pipe(
    map((action:YesUserExist)=>action.user),
    switchMap((user)=>{
        return this.userService.getUserCartLength(user.uid)
                .pipe(
                    map(length=>{
                        console.log(length);
                        return new InitializeUserCart(length);
                    })
                )
    }),
)

А в компоненте я использую метод store для отправки действий после проверки, существует пользователь или нет

ngOnInit() {
  this.logService.isUserExist().subscribe(user=>{
      if(user) this.store.dispatch(new fromUser.YesUserExist(user));
      else this.store.dispatch(new fromUser.NoUser());
  })
}

все работает нормально, пока пользователь вошел в систему. Когда пользователь выходит из системы, он выдает ошибку, как показано ниже

core.js:1673 ERROR Error: Missing or insufficient permissions.

Насколько я понимаю об этой ошибке, конвейер все еще пытается получить доступ к базе данных

Есть ли способ закрыть работу канала в ngrx / Effects или любым другим способом, пожалуйста, помогите мне!

1 Ответ

0 голосов
/ 29 августа 2018

Когда вы делаете switchMap из stream1 в другой stream2 - дважды проверьте, что вы действительно хотите слушать каждое stream2 действие, кроме первого.

Кажется, что решение состоит в том, чтобы добавить first() к внутреннему потоку в эффекте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...