AngularFire2回调设置值

时间:2017-01-31 06:27:40

标签: angular typescript angularfire2

我正在使用AngularFire2进行角度2项目。

在我的forms.service.ts中,我有以下内容保存到firebase

saveToFirebase(bug: MyBugs) {

    const bugRef = this.af.database.object('/bugs');

    bugRef.set(bug)
}

在我的app.component.ts中,我有

this.formsService.saveToFirebase(bug);

我可以看到我的firebase能够保存数据。但是,我想对请求的状态(成功,失败,超时?)进行某种回调,这样我就可以在此过程中显示某种活动指示符。我想在我调用saveToFirebase()

的app.component文件中执行此操作

1 个答案:

答案 0 :(得分:2)

set returns a promise,所以如果你从服务方法中退回所说的承诺:

saveToFirebase(bug: MyBugs): Promise<void> {
    const bugsObject = this.af.database.object('/bugs');
    return bugsObject.set(bug);
}

可以像这样调用:

this.formsService
  .saveToFirebase(bug)
  .then(() => console.log('done!'))
  .catch(error => console.log(error));

鉴于您使用的数据库路径名为bugs并且您似乎添加了一个错误,可能是listpush是你在找什么。

push方法会将子项添加到父ref,生成推送键(一些随机数据和时间戳的组合 - 以便键按时间排序)。它会返回一个“可以”的&#39;数据库引用(即Promise),您可以从中获取推送键。

你可以这样做:

saveToFirebase(bug: MyBugs): Promise<string> {
    const bugsList = this.af.database.list('/bugs');
    const result = bugsList.push(bug);
    return result.then(() => result.key) as Promise<string>;
}

可以像这样调用:

this.formsService
  .saveToFirebase(bug)
  .then((key: string) => console.log('pushed: ' + key))
  .catch(error => console.log(error));

以上示例解决了对按键的承诺,以便服务人员可以使用它。