正如标题已经描述的那样,值的状态更改为时过早。我通过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信息的要求。
谢谢。