Как уже описывает заголовок, состояние значения изменяется слишком рано. Я получаю информацию через библиотеку pnp / pnpjs, реагирую на 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 () я получаю всех членов выбранной группы. Эти члены я буду использовать для получения информации для "head" в функции 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 () получает информацию через библиотеку, что может занять некоторое время.
Я уже пробовал функции асинхронного вызова и обратного вызова. Я довольно новичок в этих типах функций, но я решил, что, если я не получаю никаких ошибок, все должно быть в порядке.
Если у вас есть идеи или подсказки, как я могу решить мою проблему, пожалуйста, дайте мнезнать. Это также может быть связано с асинхронными функциями и функциями обратного вызова. Имейте в виду, что в функции, где я получаю информацию о «голове», я использую библиотеку pnp / pnpjs, это означает, что она полна обещаниями получить информацию о SharePoint.
Спасибо.