Изменение состояния не дожидается заполнения массива

Как уже сказано в заголовке, состояние значения меняется слишком рано. Я получаю информацию через библиотеку 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.

Спасибо.

0 ответов

Другие вопросы по тегам