Rxjs 从轮询函数创建可观察对象
我有一个函数,它以一定的时间间隔使用一些数据执行。类似于轮询函数的功能:Rxjs 从轮询函数创建可观察对象,rxjs,redux-observable,Rxjs,Redux Observable,我有一个函数,它以一定的时间间隔使用一些数据执行。类似于轮询函数的功能: function poll(handler) { setInterval(handler, 1000); // Mocking network communication } 因此,我想在redux observableepic中使用该函数,如下所示(伪代码): 如何订阅轮询函数并使用rxjs 编辑: 我试过但失败了 function start() { return Rx.Observable.create(
function poll(handler) {
setInterval(handler, 1000); // Mocking network communication
}
因此,我想在redux observable
epic中使用该函数,如下所示(伪代码):
如何订阅轮询函数并使用rxjs
编辑:
我试过但失败了
function start() {
return Rx.Observable.create((observer) => poll(observer.next));
}
function startProcess(action$) {
return action$
.filter((action) => action.type === 'START_PROCESS')
.map((action) => start())
.swipWhile((result) => result !== 'proceed') // I only want to dispatch the next action after we get a `proceed` result from the polling function
.map(() => ({ type: 'CAN_START_PROCESS' })
}
我可以将
poll
函数包装成一个承诺,然后使用Rx.Observable.fromPromise
但是我想用反应式的方式来实现它。好的,我使它能够将观察者绑定到自身:
function start() {
return Rx.Observable.create((observer) => poll(observer.next.bind(observer));
}
但仍然不知道是否有更好的解决方案使用已经创建的运算符。我建议您做的是编写轮询函数以返回可观察的:
function createPoll$() {
return Rx.Observable.interval(1000)
.flatMap(makeRequest);
}
您的启动过程函数如下所示:
function startProcess(action$) {
return action$
.filter((action) => action.type === 'START_PROCESS')
.switchMap(createPoll$)
.filter(result => result === 'proceed')
.map(() => ({ type: 'CAN_START_PROCESS' })
}
所以你想为每个动作注册一个新的轮询“looper”?基本上,我想收听网络,直到收到
procedue
消息。因此,redux操作流程类似于:START\u流程
->进入redux observable epic->在这里,我们监听轮询observable,直到我们获得继续->START\u流程
function startProcess(action$) {
return action$
.filter((action) => action.type === 'START_PROCESS')
.switchMap(createPoll$)
.filter(result => result === 'proceed')
.map(() => ({ type: 'CAN_START_PROCESS' })
}