Вы можете использовать новые ключевые слова Javascript async
и await
Сначала выполните getSomeData
async, что также требует, чтобы оно вернуло обещание:
private async getSomeData(): Promise<DataObjectArray[]> {
return this.myService.something().map((response: Response) => {
return response.children;
});
}
, затем ожидайтефункция в compileData
:
let someData = await this.getSomeData();
Однако это означает, что compileData
, поскольку он возвращает результат, также должен быть асинхронным.Это означает, что вам нужно добавить ключевое слово async
и изменить тип на Promise<DifferentDataArray[]>
.
Если вам не важен ваш результат, вы можете вызвать асинхронную функцию без ожидания, поэтому вы также не можетене нужно ждать результата, и он обрабатывается в фоновом режиме.Если вы полагаетесь на результат, вы должны его дождаться.В этом случае другие части вашего приложения могут продолжаться!В любом случае, если вы разрабатываете асинхронное приложение, вам нужно подумать о том, что произойдет, когда все равно.
Ваша полная функция compileData:
public async compileData(): Promise<DifferentDataArray[]> {
// get some stuff from a config, then make service call
let someData = await this.getSomeData();
/* If I have a promise returned, someData errors saying not an array type */
for (let oneData of someData){
/* loop through config data + service data making a return object array */
}
return this.dataCollection;
}
public compileData(): DifferentDataArray[] {
// get some stuff from a config, then make service call
let someData = this.getSomeData();
/* If I have a promise returned, someData errors saying not an array type */
for (let oneData of someData){
/* loop through config data + service data making a return object array */
}
return this.dataCollection;
}