Я пишу фрагмент кода, который проверяет, не вызовут ли 2 лекарства неблагоприятную реакцию на лекарства.
Моя функция checkForCla sh () вызывает функцию getCollisionsList (), которая должна заполнить переменная insteractionsLists.
Часть кода выглядит следующим образом (игнорируйте бит usingSynonym)
if(usingSynonum){
interactionsLists = await this.getCollisionsList(i, idOfSyn);
}else {
interactionsLists = await this.getCollisionsList(i, listOfAllMeds2[j].id);
}
console.log("WHAT IS BEING EXAMINED " + interactionsLists[i].length);
Проблема здесь заключается в том, «ЧТО ИМЕЕТСЯ ИЗУЧЕНО», т.е. потому что вызов getCollisionsList, который заполнил взаимодействия, еще не завершен.
Вот функция getCollisionsLists:
getCollisionsList(i, id): DrugInteraction[][] {
let interactions: Array<DrugInteraction> = new Array<DrugInteraction>();
let dataa = {};
this.httpClient.getInteractionById(id).subscribe(data => {
dataa=data;
const JSONdata: any = data;
console.log("DATA " + data.length);
for (let i = 0; i < JSONdata.length; i++) {
const int: DrugInteraction = new DrugInteraction(JSONdata[i].drug_id, JSONdata[i].name, JSONdata[i].description);
interactions.push(int);
}
});
interactionsLists.push(interactions);
return interactionsLists;
}
Как вы можете видеть по выводу консоли, функция выполняет выборку «ДАННЫЕ», но функция checkForCla sh (main) продолжает работу с кодом, не дожидаясь, пока эти данные будут заполнены в списках взаимодействия. Вот вывод консоли:
[Log] WHAT IS BEING EXAMINED 0
[Log] DATA 645
[Log] DATA 1706
Я бы хотел, чтобы данные были добавлены, прежде чем код продолжится ... Могу ли я заставить основную функцию ждать завершения функции getCollisionsList?
Извините за беспорядок в коде, я очень плохо знаком с Angular, и я попробовал все, чтобы попытаться сделать это.