В приложении Angular у меня есть компонент и услуга, указанные ниже. У меня есть три флажка в связанных div, и обычно флажок по умолчанию установлен для данных, полученных из вызова asyn c api в ngOnInit
.
Мне нужно удалить флажок по умолчанию, если он не куплен как часть функции, и когда это происходит, и этот флажок удаляется из шаблона с помощью ngIf
, мне нужно выбрать следующий по умолчанию.
Мой метод проверки функции - это метод async
, поэтому я вызвал это похоже на (async () => { ... })()
, как показано ниже.
Я тестировал, и иногда он отмечает следующий, но иногда нет. Поэтому я думаю, что, поскольку мой новый вызов метода также является asyn c, их порядок неизвестен.
Я использую метод asyn c getFeatures из нескольких мест с помощью настраиваемой структурной директивы, чтобы решить, будут ли отображать шаблоны или не для большинства случаев, которые не имеют предварительного условия, поэтому у меня не было такого требования, но в этом случае у меня есть условие, поэтому у меня есть порядок между вызовами asyn c.
Мои вопросы:
- Как я могу вызвать
async getFeatures() {}
синхронно в этом случае? - Как я могу настроить, как getFeatures будет запускаться последним или после
getPreset
?
@Component({
/...
})
export class AComponent implements OnInit {
ngOnInit() {
//do some things
this.getPreset(); //async calls
// my new async function call
(async () => {
let utpFeature = await this.featureService.getFeatures("runPlans");
this.utpFeatureStatus = utpFeature ? utpFeature.Status : true;
//enabling next one which is "FillInYourself" checkbox if it does not have a feature
this.MyForm.controls["FillInYourself"].setValue(!this.utpFeatureStatus);
})();
}
getPreset() {
//get a lot of data async from multiple services
//set one of three checkboxes as marked as default.
forkJoin([getFoo, getBar, getBaz]).subscribe((results: any) => {
//transform result and process data
checkedUseFirstPlan(data); //normally default checkbox
}
}
checkedUseFirstPlan(data: boolean) {
if (!data) {
this.MyForm.controls["UseFirstPlan"].setValue(true);
return;
}
this.MyForm.controls["UseFirstPlan"].setValue(data);
this.MyForm.controls["FillInYourself"].setValue(!data);
this.MyForm.controls["OtherPlan"].setValue(!data);
}
}
//service
async getFeatures(keyname: string) {
//...
await this.apiService.getFeatures().toPromise().then((result: any) => {
//process result and obtain feature related to this keyname
}
return feature;
}