我的服务中有以下方法,它返回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中时,控制台中会显示以下内容:
当我删除t并用
替换它时this.bugDetail = this.bugService.getBug(this.bugId);
我得到的错误信息是:
类型'Promise'不能指定为'Bug'类型。 “承诺”类型中缺少属性“id”。
有人可以向我解释如何访问从BugDetail组件中的服务中检索到的错误详细信息吗?
答案 0 :(得分:1)
getBug
会返回Promise<Bug>
- 这是一个将解析为Bug
值的承诺。 Promise异步解析,并且解析的值可用于传递给promise的then
方法的函数。这是您可以访问已解决的值的唯一方法。
您可以分配给this.bugDetail
,如下所示:
this.bugService
.getBug(this.bugId)
.then(bug => { this.bugDetail = bug; });