mys*_*mic 1 javascript system.reactive rxjs redux-observable
我想使用takeUntil运算符来完成无法自然完成的内部流,如下所示:
outerObservable
.mergeMap(() => {
innerObservable
.takeUntil(stopObservable$)
});
Run Code Online (Sandbox Code Playgroud)
这可以正常工作,内部流按预期完成,但是我希望外部流在停止信号之后返回最后一个值。即使经过大量谷歌搜索,我仍然不知道如何做。
编辑:
我写了一个似乎可以解决问题的运算符,但是让问题悬而未决,因为我知道有更好的方法或完全被我误解的东西。
outerObservable
.mergeMap(() => {
innerObservable
.takeUntil(stopObservable$)
});
Run Code Online (Sandbox Code Playgroud)
听起来您想在innerObservable和之间竞赛stopObservable,无论哪个获胜,都应该能够输出一些东西。
您可以.race()为此使用适当命名的运算符,而不是使用.takeUntil()。请参阅关于取消的redux-observable docs食谱中的示例:
const somethingEpic = action$ =>
action$.ofType(SOMETHING)
.mergeMap(action =>
innerObservable
.race(
stopObservable
.take(1)
)
);
Run Code Online (Sandbox Code Playgroud)
由于您的示例是伪代码,因此以下是更具体的示例:
import { ajax } from 'rxjs/observable/dom/ajax';
const fetchUserEpic = action$ =>
action$.ofType(FETCH_USER)
.mergeMap(action =>
ajax.getJSON(`/api/users/${action.payload}`)
.map(response => fetchUserFulfilled(response))
.race(
action$.ofType(FETCH_USER_CANCELLED)
.map(() => incrementCounter())
.take(1)
)
);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1142 次 |
| 最近记录: |