如何从React JS中的函数返回数组

时间:2019-12-10 07:11:32

标签: reactjs sharepoint web-parts spfx sharepoint-2019

嗨,我是新来响应js的人,我正在调用getItem函数并将响应推入数组并返回该数组,但是我在返回之前就得到了空数组

  private _LoadExpenses() {
    const items: IExpense[] = [];
    this._expensesDataProvider.getItems().then((expenses: IExpense[]) => {
        expenses.forEach(element => {
          items.push({SGDDAppDate:element.SGDDAppDate,ExpenseCategory:element.ExpenseCategory,ExpenseType1:element.ExpenseType1});
       });
        return expenses;
    });
    //console.log(items)
    return items;
  }

2 个答案:

答案 0 :(得分:0)

在阻止this._expensesDataProvider完成之后,您在console.log(items)中必须为空。而且我认为getItems()是异步的,因此在数据到达并将项目推入项数组之前,请您进行控制台。记录为空的项。

您需要在退还费用之前使用console.log(items);

,如果以后需要返回项目,则用户u可以将代码包装在Promise中并返回Promise,那么每次需要使用项目时,都必须使用.then,例如本示例=> https://codesandbox.io/s/kind-rhodes-w1twf

因为一旦“ this._expensesDataProvider”运行,然后“返回项目”将运行,此时项目为空。

答案 1 :(得分:0)

我的示例异步功能代码:

private async _getListData(): Promise<IReactItem[]> {
  return pnp.sp.web.lists.getByTitle("TestList").items.select("Id,Title,Description,User/ID,User/EMail").expand("User").get().then((response:IReactItem[]) => {
    return response;
  });
}

调用函数:

this._getListData().then(items=>{
    console.log(items);
  });

输入您的代码。

尝试:

private _LoadExpenses(): Promise<IExpense[]> {  
  return this._expensesDataProvider.getItems().then((expenses: IExpense[]) => {      
      return expenses;
  });  
}