状态更改不等待数组填充

时间:2019-11-21 09:21:57

标签: sharepoint promise react-tsx pnp-js

正如标题已经描述的那样,值的状态更改为时过早。我通过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()中,我获得了所选组的所有成员。我将使用这些成员在函数 getHeads()中获取“ head”的信息。

  private getHeads = (allGroups) => {
    let heads = [];
    allGroups.forEach((group) => {
      heads.push(this.getHeadOf(group));
    });
    console.log(heads);

    //return does not wait!
    return heads;
  }

在这里它返回数组“ heads”为时过早,并且不等待foreach循环。 (这最终导致状态的早期改变)。函数 getHeadOf()通过库获取信息,这可能需要一段时间。

我已经尝试了异步和回调函数。我对这些类型的函数还很陌生,但是我认为只要没有任何错误就可以了。

如果您有任何想法或线索可以解决我的问题,请告诉我。它也可以是关于异步和回调函数的。请记住,在我获取“头部”信息的函数中,我使用了pnp / pnpjs库,这意味着它可以满足承诺获取SharePoint信息的要求。

谢谢。

0 个答案:

没有答案