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' })
}