在Subject.next调用后返回Observable
问题描述:
我正在开发Ionic 2项目,并且有两个重要功能可用于注销用户并远程清除数据库。这是我工作的在Subject.next调用后返回Observable
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调用之前,需要调用注销事件事件。我正在使用Rxjs来做到这一点。
完成注销事件后调用clearDbEvent的最佳方式是什么?
答
如果你真的需要触发clearDbEvent
logoutEvent
完成后,您需要将其添加到complete
处理程序subscribe
。
this.logoutEvent.take(1).subscribe(() => {
...
}, undefined,() => this.clearDbEvent.next());
最终,你可以使用finally
操作员会在logoutEvent
完成和取消之后调用。
this.logoutEvent
.take(1)
.finally(() => this.clearDbEvent.next())
.subscribe(() => {
...
}
注销时不需要清除数据库。我希望在清除数据库之前注销用户。 –
然后使用'this.clearDbEvent.do(()=> this.logoutEvent.next())...' – martin