Изменение состояния не ждет заполнения массива - PullRequest
0 голосов
/ 21 ноября 2019

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

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...