'键入' void'不能分配给... ...(自定义类型)

时间:2017-05-03 18:43:56

标签: angular typescript firebase promise ionic2

我已经研究了这个错误了几天,而且我仍然不能很好地理解它,以便在我的代码中弄明白我需要做什么。

我正在通过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();
        });
}

1 个答案:

答案 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);
}

我认为你阅读承诺是明智的。