【发布时间】:2017-10-01 17:47:20
【问题描述】:
我已经研究这个错误几天了,但我仍然不能很好地理解我需要在我的代码中具体做什么。
我正在通过 firebase 从云中检索数据,并将其加载到我的 Ionic 2 应用程序的 html 中。除了这一点,一切都很好。
我不知道如何让我的方法getData() 被识别为返回我构建的自定义类型/对象数组。相反,TypeScript 只将该方法识别为返回“void”。
如果我从承诺中取出return 调用,该方法将被识别为返回正确的类型。但是,它将返回空,因为在调用 return 之前需要更多时间来检索数据。
以下是这两个文件及其代码。 home.ts 文件控制着我的应用程序的主页。 data.ts 文件是我要导入到我的文件中以完成工作的数据服务。
我需要做什么来纠正这个错误并返回promise中的数据?
感谢观看!
在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();
});
}
【问题讨论】:
-
您缺少外部回报。那是
return this.db.ref('Data/').once('value') -
不应该在loadData()函数中处理promise吗?
-
@birwin 你所说的“履行承诺”是什么意思?
-
不确定,但我在想你的 getData() 函数应该返回一个承诺,而你的 loadData 函数应该调用 .then 在从 getData() 调用返回的承诺上......
this.dataService.getData().then()跨度> -
@aluan Firebase documentation 是这样解释的:在某些情况下,您可能需要在不监听更改的情况下获取数据的快照,例如在初始化您不希望更改的 UI 元素时。您可以使用
once()方法来简化此场景:它触发一次,然后不再触发。
标签: angular typescript firebase promise ionic2