Я пытаюсь установить данные в службе, а затем перемещаться после того, как данные были заполнены службой, у меня возникает проблема синхронизации, когда страница перемещается до того, как служба была заполнена.
] У меня есть следующий код в службе
addToken(token) {
this.cookieService.set( 'token', token );
}
и следующий код при нажатии кнопки: -
this.token.addToken(res);
this.router.navigate(['/admin']);
После запуска маршрутизатора запускаются триггеры / admin конечная точка со следующими заголовками: -
authHttpHeaders = new HttpHeaders({
'Authorization': 'Bearer ' + this.token.getToken(),
'Content-Type' : 'application/json',
'Cache-Control': 'no-cache'
});
Функция getToken () просто получает маркер из файла cookie: -
getToken() {
return this.cookieService.get('token');
}
Как я могу обеспечить addToken () (! d5)
Я знаю, что могу добиться этого с помощью setTimeout, но мне это не нравится.
Я бы предпочел иметь какую-то форму наблюдаемого или способа увидеть, что токен не равен нулю или пуст до запуска навигационного маршрутизатора.
Спасибо за помощь.
Возвратите наблюдаемое, чтобы вы могли подписаться на него и дождаться окончания действия службы и отфильтровать ответ, чтобы отменить, когда токен является ложным.
addToken(token) {
this.cookieService.set( 'token', token );
return of(token);
}
this.token.addToken(res)
.pipe(filter(res => !!res))
.subscribe(() => {
this.router.navigate(['/admin']);
});