'Promise'不能分配给'Model'类型 - Angular2 / Firebase

时间:2017-01-15 07:04:41

标签: angular typescript firebase firebase-realtime-database

我的服务中有以下方法,它返回Firebase中与传入的bugId匹配的单个记录:

//请注意,这位于bugservice.ts

   getBug(bugId: string): Promise<Bug> {

    return this.bugsDbRef
        .child(bugId)
        .once('value')
        .then(snapshot => {
            const bugInfo = snapshot.val() as Bug;
            bugInfo.id = snapshot.key;
        }) as Promise<Bug>;
}

在我的bugDetail组件中,我将上述服务注入我的bugDetail组件,然后调用上面的方法,如下所示:

export class BugDetailComponent implements OnInit, OnDestroy {

private subscription: Subscription;

private bugDetail: Bug = new Bug(null,null,null,null,null,null,null,null,null); // Trying to populate from Service Call i.e getBug    
private bugId: string; // Come from URL

constructor(private bugService: BugService, private activatedRoute: ActivatedRoute) { }

ngOnInit() {
    this.configureForm();

    this.subscription = this.activatedRoute.params.subscribe(
        (param: any) => {
            this.bugId = param['id'];
        });

    const t = this.bugService.getBug(this.bugId);

    console.log(t);

}
}

但是当我在console.log中时,控制台中会显示以下内容:

enter image description here

当我删除t并用

替换它时
this.bugDetail = this.bugService.getBug(this.bugId);

我得到的错误信息是:

类型'Promise'不能指定为'Bug'类型。   “承诺”类型中缺少属性“id”。

有人可以向我解释如何访问从BugDetail组件中的服务中检索到的错误详细信息吗?

1 个答案:

答案 0 :(得分:1)

getBug会返回Promise<Bug> - 这是一个将解析为Bug值的承诺。 Promise异步解析,并且解析的值可用于传递给promise的then方法的函数。这是您可以访问已解决的值的唯一方法。

您可以分配给this.bugDetail,如下所示:

this.bugService
    .getBug(this.bugId)
    .then(bug => { this.bugDetail = bug; });

您可能需要阅读JavaScript Promises: an Introduction