在 Observable 中返回承诺
2017-08-07
6830
我有一个使用 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);
});
}
所以这个方法的作用基本上是删除 /teams/,并且对于团队中的每个成员,删除团队,因此删除 /members//teams/。
我所做的是检索团队中的成员列表,因为这是一个可观察对象,所以在订阅中我编写了“查询”并使用
this.sdkDB.update(dataToRemove)
最后一个方法返回一个 Promise,这就是我想要作为方法
removeTeam
的结果返回的,有没有办法做到这一点?
谢谢
2个回答
如果
sdkDB
返回一个 Observable,则导入
rxjs/add/operator/mergeMap
并使用
flatMap
或
mergeMap
(flatMap 只是 mergeMap 的一个别名)而不是
subscribe
。
这将组合您的可观察流。
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();
}
Lansana Camara
2017-08-07
尝试一下:
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);
});
}
Faly
2017-08-07