在Subject.next调用后返回Observable

在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的最佳方式是什么?

也许函数switchMap可以帮助你?

在这里你可以看到一个教程: https://www.youtube.com/watch?v=6lKoLwGlglE&t=18s

如果你真的需要触发clearDbEventlogoutEvent完成后,您需要将其添加到complete处理程序subscribe

this.logoutEvent.take(1).subscribe(() => { 
    ... 
}, undefined,() => this.clearDbEvent.next()); 

最终,你可以使用finally操作员会在logoutEvent完成和取消之后调用。

this.logoutEvent 
    .take(1) 
    .finally(() => this.clearDbEvent.next()) 
    .subscribe(() => { 
     ... 
    } 
+0

注销时不需要清除数据库。我希望在清除数据库之前注销用户。 –

+0

然后使用'this.clearDbEvent.do(()=> this.logoutEvent.next())...' – martin