我已经研究了这个错误了几天,而且我仍然不能很好地理解它,以便在我的代码中弄明白我需要做什么。
我正在通过firebase从云中检索数据,并将其加载到我的Ionic 2应用程序的html中。除了这一点,一切都很棒。
我不知道如何让我的方法getData()
被识别为返回我已构建的自定义类型/对象数组。相反,TypeScript仅将方法识别为返回" void。"
如果我从承诺中取出return
调用,则该方法将被识别为返回正确的类型。但是,它将返回空,因为在调用return
之前需要更多时间来检索数据。
以下是两个文件及其代码。 home.ts
文件控制着我应用的主页。 data.ts
文件是我导入到我的文件中以完成工作的数据服务。
我需要做些什么才能纠正此错误并在承诺中返回数据?
谢谢你看看!
在home.ts
:
// This is a custom object that I am importing & using in arrays.
listData: DataComponent[][];
loadData() {
this.listData = this.dataService.getData();
}
在data.ts
:
// Again, this is the custom object that I am importing & using below.
private dataArray: DataComponent[][];
getData() {
// This is my connection to firebase.
this.db.ref('Data/').once('value')
.then(data => {
var obj = data.val();
this.dataArray = Object.keys(obj).map(function(e) { return obj[e] });
return this.dataArray.slice();
});
}
答案 0 :(得分:3)
也许是这样的?
getData(): Promise<DataComponent[][]> {
return this.db.ref('Data/').once('value').then(data => {
var obj = data.val();
return <DataComponent[][]> Object.keys(obj).map(function(e) { return obj[e] };
});
}
第一个返回返回结果,但是在包含DataComponent[][]
的promise中。第二个返回是匿名函数(a.k.a lambda函数)的一部分,它将来自Firebase的数据转换为DataComponent[][]
。
您可以这样使用它:
loadData() {
this.dataService.getData().then(data => this.listData = data);
}
我认为你阅读承诺是明智的。