Проблема здесь в том, что между вызовом API и оценкой переменной isSignedIn
существует условие состязания.Мы можем разобраться в этом.
Если вы посмотрите на документы для CanActivate
Guard, вы увидите, что Observable<boolean>
является одним из возможных типов возврата.Поэтому удалите код HTTP
в конструкторе, измените тип возвращаемого вами метода на Observable<boolean>
и вместо возврата переменной isSignedIn
, как вы это сделали, сделайте следующее:
Если ваш вызов API возвращаетнепосредственно логическое:
return this.http.get(this.url + 'api/Authentication/UserInfo');
Если по какой-то причине ваш API не возвращает логическое значение напрямую:
return this.http
.get(this.url + 'api/Authentication/UserInfo')
.pipe(result => !!result);
ВозвращаяObservable<boolean>
назад мы говорим Angular, что в какой-то момент мы вернем логическое значение , но мы просто не знаем , когда именно это произойдет.Поэтому в этом случае он будет ждать разрешения, прежде чем продолжить.