Javascript 重新调用返回Rxjs observable的函数

Javascript 重新调用返回Rxjs observable的函数,javascript,reactjs,generator,rxjs,Javascript,Reactjs,Generator,Rxjs,我正在React中构建一个carousel组件,我希望可消费函数(如advanceSlide、revindslide等)返回RxJSObservables,它们可以轻松地链接、合并,或者与其他可观察对象进行任何操作 现在,我的advance函数如下所示: advance = (toIndex = this.state.focusedIndex + 1, animated = true) => { const destinationIndex = Math.max(0, Math.m

我正在React中构建一个carousel组件,我希望可消费函数(如advanceSlide、revindslide等)返回RxJS
Observable
s,它们可以轻松地链接、合并,或者与其他可观察对象进行任何操作

现在,我的
advance
函数如下所示:

advance = (toIndex = this.state.focusedIndex + 1, animated = true) => {
    const destinationIndex = Math.max(0, Math.min(toIndex, this.props.children.length));
    const itemPosition = this._positions[destinationIndex];
    const domNode = $(ReactDOM.findDOMNode(this.refs.track));
    const animate = Rx.Observable.fromCallback(domNode.animate.bind(domNode));
    this.setState({ focusedIndex: destinationIndex });
    return animate({
      top: '-' + itemPosition.top + 'px'
    }, animated ? this.props.speed : 0);
};
理想情况下,我希望调用此函数,如下所示:

this.refs.carousel.advance().delay().repeat(); //achieve infinite carousel
但是,非常明显的是,从
advance
返回的可观测值在重复时使用相同的计算(因为该函数使用
.advance()
调用一次,并且只重复可观测值)

我需要的是一种方法,返回一个可观察到的,再次运行动画计算,然后每次重复时返回一个新的可观察到的

为了更好地说明我想要实现的目标:

 carousel.advance().repeat(1).subscribe();
在第一次调用时,将计算位置和其他内容,返回可观察的动画,并运行它,所有内容都将正确设置动画。 在第二次调用时,将使用相同的值重复该信号,因此对于用户来说,似乎什么都没有发生,因为没有重新调用
advance
函数


如何使用RxJS实现该功能?我一直在研究使用
Rx.Observable.spawn
,但它似乎不是我所需要的。

确实没有重新调用
advance
函数,但它输出的可观测值会被重新订阅

另外请注意,如果您想重复一次(我知道这听起来很奇怪),您应该使用
repeat(2)

如果要重复
advance
为什么不将其放入可观察链中?例如:

var Xms = 1000; // 1s
advanceRepeated = (context) => {
  return Rx.Observable.just(context)
                      .flatMap ((context) => {
                                 return context.refs.carousel.advance().delay(Xms); 
                               })
                      .repeat(2)
}

这是未经测试的,请让我知道它是否真的有效,并请注意可能的语法错误。

这正是我要找的。我想可能会涉及平面图,但不确定如何。谢谢!