我使用angularfire2的Angular应用程序,我使用的方法从firebase中的几个不同的表中删除了一些信息。
removeTeam(key: string) {
const dataToRemove = {};
dataToRemove[`teams/${key}`] = null;
this.findMembersInTeam(key).subscribe(members => {
members.forEach(member => {
dataToRemove[`members/${member}/teams/${key}`] = null;
});
this.sdkDB.update(dataToRemove);
});
}
所以这样做,基本上就是remove / teams /,而且,对于团队中的每个成员,都要删除团队,所以删除/ members // teams /.
我所做的是检索团队中的成员列表,因为这是一个可观察的,所以在订阅中我编写了"查询"并使用this.sdkDB.update(dataToRemove)
这最后一个方法返回一个Promise,这就是我想要返回的方法removeTeam
的结果,有没有办法做到这一点?
由于
答案 0 :(得分:4)
如果sdkDB
返回一个Observable,则导入rxjs/add/operator/mergeMap
并使用flatMap
或mergeMap
(flatMap只是mergeMap的别名)而不是subscribe
。< / p>
这结合了您的可观察流。
removeTeam(key: string) {
const dataToRemove = {};
dataToRemove[`teams/${key}`] = null;
return this.findMembersInTeam(key)
.flatMap(members => {
members.forEach(member => {
dataToRemove[`members/${member}/teams/${key}`] = null;
});
return this.sdkDB.update(dataToRemove);
})
.toPromise();
}
答案 1 :(得分:1)
试试这个:
import 'rxjs/add/operator/toPromise';
// ...
removeTeam(key: string) {
const dataToRemove = {};
dataToRemove[`teams/${key}`] = null;
return this.findMembersInTeam(key)
.toPromise()
.then(members => {
members.forEach(member => {
dataToRemove[`members/${member}/teams/${key}`] = null;
});
return this.sdkDB.update(dataToRemove);
});
}