Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
AngularFire2回调以设置值_Angular_Typescript_Angularfire2 - Fatal编程技术网

AngularFire2回调以设置值

AngularFire2回调以设置值,angular,typescript,angularfire2,Angular,Typescript,Angularfire2,我正在使用AngularFire2进行AngularFire2项目 在我的forms.service.ts中,我有以下内容要保存到firebase saveToFirebase(bug: MyBugs) { const bugRef = this.af.database.object('/bugs'); bugRef.set(bug) } 在我的app.component.ts中,我有 this.formsService.saveToFirebase(bug); 我可以看

我正在使用AngularFire2进行AngularFire2项目

在我的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能够保存数据。但是,我希望对请求的状态(成功、失败、超时?)进行某种回调,以便在过程中显示某种活动指示器。我想在我的app.component文件中执行此操作,我在其中调用saveToFirebase()

,因此如果您从服务方法返回所述承诺:

saveToFirebase(bug: MyBugs): Promise<void> {
    const bugsObject = this.af.database.object('/bugs');
    return bugsObject.set(bug);
}
考虑到您使用的数据库路径名为
bugs
,并且您似乎在添加一个bug,这很可能就是您正在寻找的

push
方法将向父ref添加一个子项,生成push键(一些随机数据和时间戳的组合,以便键按时间排序)。它返回一个“thenable”数据库引用(即承诺),您可以从中获得按键

你可以这样做:

this.formsService
  .saveToFirebase(bug)
  .then(() => console.log('done!'))
  .catch(error => console.log(error));
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));
上面的示例将承诺解析为按键,以便服务的调用者可以使用它。

,因此如果您从服务方法返回所述承诺:

saveToFirebase(bug: MyBugs): Promise<void> {
    const bugsObject = this.af.database.object('/bugs');
    return bugsObject.set(bug);
}
考虑到您使用的数据库路径名为
bugs
,并且您似乎在添加一个bug,这很可能就是您正在寻找的

push
方法将向父ref添加一个子项,生成push键(一些随机数据和时间戳的组合,以便键按时间排序)。它返回一个“thenable”数据库引用(即承诺),您可以从中获得按键

你可以这样做:

this.formsService
  .saveToFirebase(bug)
  .then(() => console.log('done!'))
  .catch(error => console.log(error));
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));

上面的示例解析了按键的承诺,以便服务的调用者可以使用它。

谢谢。我怎么知道在这种情况下是否发生了错误呢?实际上,
set
返回
firebase.Promise
,这有点烦人,但可以安全地将其转换为:
return bugRef.set(bug)as Promise愚蠢的问题。为什么承诺很烦人?它在这种情况下起作用。另外,如果您有:Promise,那么将其转换为return bugRef.set(bug)as Promise不是多余的吗?这不是承诺;事实上,它是一个
firebase.Promise
,这有点让人恼火——正如TypeScript所看到的,它是
Promise
的不同类型。就这些,谢谢卡坦特。你说得对,我确实需要推搡。然而,为什么它是可见的?我是否只想把它推到列表上一次,然后像承诺一样离开它?。你介意和我分享一下我如何改变它,让它通过observable完成吗?文档不是很清楚,很遗憾……谢谢。我怎么知道在这种情况下是否发生了错误呢?实际上,
set
返回
firebase.Promise
,这有点烦人,但可以安全地将其转换为:
return bugRef.set(bug)as Promise愚蠢的问题。为什么承诺很烦人?它在这种情况下起作用。另外,如果您有:Promise,那么将其转换为return bugRef.set(bug)as Promise不是多余的吗?这不是承诺;事实上,它是一个
firebase.Promise
,这有点让人恼火——正如TypeScript所看到的,它是
Promise
的不同类型。就这些,谢谢卡坦特。你说得对,我确实需要推搡。然而,为什么它是可见的?我是否只想把它推到列表上一次,然后像承诺一样离开它?。你介意和我分享一下我如何改变它,让它通过observable完成吗?不幸的是,文件不是很清楚。。。。