我正在开发Ionic 2项目,有两个重要功能可以注销用户并远程清除数据库。这是我正在处理的代码
private logoutEvent: Subject<any> = new Subject();
private clearDbEvent: Subject<any> = new Subject();
this.logoutEvent.take(1).subscribe(() => {
// do something before logout
// has a loader and dismiss the loader after 3 seconds in this block
});
this.clearDbEvent.take(1)
.skipUntil(this.logoutEvent.take(1))
.concat(this.resetDb())
.subscibe()
private resetDb() {
return Observable.forkJoin(
Observable.fromPromise(this.getLocaldb.destroy()),
Observable.fromPromise(this.getStarogeDb.destroy())
);
}
用户可以注销调用 logoutEvent.next()调用(我使用pouchdb同步功能执行此操作)并且它正常工作。我想要做的是,在 clearDbEvent 调用之前,需要调用 logoutEvent 事件。我正在使用Rxjs来做这件事。
完成注销事件后调用clearDbEvent的最佳方法是什么?
答案 0 :(得分:0)
也许函数switchMap可以帮到你?
在这里你可以看到一个教程: https://www.youtube.com/watch?v=6lKoLwGlglE&t=18s
答案 1 :(得分:0)
如果您确实需要在clearDbEvent
完成后触发logoutEvent
,则需要将其添加到complete
中的subscribe
处理程序。
this.logoutEvent.take(1).subscribe(() => {
...
}, undefined, () => this.clearDbEvent.next());
最终,您可以使用在finally
完成并取消订阅后调用的logoutEvent
运算符。
this.logoutEvent
.take(1)
.finally(() => this.clearDbEvent.next())
.subscribe(() => {
...
}