У меня есть служба Angular 2, которая должна выполнять асинхронную работу, когда она инициализирована, и ее нельзя использовать до завершения этой инициализации.
@Injectable()
export class Api {
private user;
private storage;
constructor(private http: Http) {
this.storage = LocalStorage;
this.storage.get('user').then(json => {
if (json !== "") {
this.user = JSON.parse(json);
}
});
}
// one of many methods
public getSomethingFromServer() {
// make a http request that depends on this.user
}
}
В настоящее время эта служба инициализируется и немедленно возвращается к любому компоненту, который ее использует. Затем этот компонент вызывает getSomethingFromServer()
в своем ngOnInit
, но в этот момент Api.user не инициализируется, и поэтому отправляется неправильный запрос.
Крюки жизненного цикла (OnInit
, OnActivate
и т.д.) не работают с сервисами, а только с компонентами и директивами, поэтому я не могу их использовать.
Для сохранения обещания из get()
для вызова потребуется все различные методы, зависящие от пользователя, чтобы ждать его, что вызывает много дублирования кода.
Каков рекомендуемый способ инициализации служб async в Angular 2?