Изменение состояния не дожидается заполнения массива
Как уже сказано в заголовке, состояние значения меняется слишком рано. Я получаю информацию через библиотеку pnp/pnpjs в react для SharePoint и заполняю информацию в виде массива. После этого я хочу изменить свое состояние на такую информацию. Получение информации не проблема, все работает нормально, но с изменением состояния я не могу справиться должным образом.
Я получаю эту информацию, как только пользователь выбирает группу в этом средстве выбора: https://sharepoint.github.io/sp-dev-fx-property-controls/controls/PropertyFieldPeoplePicker/
private getGroups = (items: any[]) => {
console.log("items:" , items);
let newItems = items;
let prmse:Promise<void>[] = [];
for(let i = 0; i < newItems.length; i++) {
let ready = this.getMembers(newItems[i]);
prmse.push(ready);
}
Promise.all(promiseMem).then(() => {
this.props.onRequestMainChange(() => {
return { groups: newItems, head: this.getHeads(newItems) };
});
});
}
В функции getMembers() я получаю всех членов выбранной группы. Эти члены я буду использовать для получения информации для "головы" в функции getHeads ().
private getHeads = (allGroups) => {
let heads = [];
allGroups.forEach((group) => {
heads.push(this.getHeadOf(group));
});
console.log(heads);
//return does not wait!
return heads;
}
Здесь он возвращает массив "голов" слишком рано и не дожидается цикла foreach. (Это в конечном итоге приводит к раннему изменению состояния). Функция getHeadOf() получает информацию через библиотеку, что может занять некоторое время.
Я уже пробовал функции async и callback. Я новичок в этих типах функций, но решил, что пока у меня не будет ошибок, все будет в порядке.
Если у вас есть идеи или подсказки, как я могу решить свою проблему, дайте мне знать. Это также может быть об асинхронных и обратных функциях. Имейте в виду, в функции, где я получаю информацию о "голове", я использую библиотеку pnp/pnpjs, значит она заполнена обещаниями получения информации о SharePoint.
Спасибо.