在Subject.next调用之后返回一个Observable

时间:2017-08-14 09:30:39

标签: javascript angular ionic2 rxjs

我正在开发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的最佳方法是什么?

2 个答案:

答案 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(() => {
        ...
    }