1

嗨,我是反应 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;
  }
4

2 回答 2

1

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

您需要在返回费用之前 console.log(items) ;

如果您需要为以后的用户返回项目,您可以将您的代码包装在 Promise 中并返回一个 Promise ,然后每次您需要您必须使用的项目。然后像这个例子 => https://codesandbox.io/s/kind -罗德-w1twf

因为只要“this._expensesDataProvider”运行,那么“return items”就会运行,此时项目是空的。

于 2019-12-10T07:39:49.803 回答
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;
  });  
}
于 2019-12-11T09:13:20.913 回答