您可以使用以下方法从可观察链中丢弃任何 next 值.ignoreElements()
RxJS 运算符
action$.ofType(type)
.do(() => resolve())
.ignoreElements();
另一种方法(没有更多的正确或错误)是创建一个仅订阅的匿名 Observable。
const waitForResultEpic = action$ => new Observable(observer =>
action$.ofType(type)
.subscribe(() => resolve())
);
这会隐式返回我们创建的订阅,以便它也附加到我们的 rootEpic 的生命周期中。因为我们从不打电话observer.next()
,这个史诗从不发出任何值;就像ignoreElements()
.
尽管您没有询问,但您最终可能会注意到您的史诗将永远运行,监听与type
多变的。这可能不是你想要的,如果你想匹配once然后完成。
您可以使用以下方法来完成此操作.take(1) http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#instance-method-take操作员。
const waitForResult = action$ =>
action$.ofType(type)
.take(1)
.do(() => resolve())
.ignoreElements();
Or
const waitForResult = action$ => new Observable(observer =>
action$.ofType(type)
.take(1)
.subscribe({
next: () => resolve(),
error: err => observer.error(err),
complete: () => observer.complete()
})
);
在应用程序的生命周期内,这只匹配一次——一旦收到,就不会再匹配一次。