嗨,我是新来响应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;
}
答案 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;
});
}