Javascript 带背压的Rxjs缓冲区实现

Javascript 带背压的Rxjs缓冲区实现,javascript,reactive-programming,rxjs,Javascript,Reactive Programming,Rxjs,RxJS新手问题来了! 因此,我有一个基本的缓冲区,它将从source1和source2到数组的所有内容追加到一个数组中。在某些情况下,缓冲区被清除 var buffer = Rx.Observable.merge(source1, source2).scan( function (arr, item) { if (!magic) { return arr.push(item); } else { return [item]; //Cl

RxJS新手问题来了! 因此,我有一个基本的缓冲区,它将从source1和source2到数组的所有内容追加到一个数组中。在某些情况下,缓冲区被清除

var buffer = Rx.Observable.merge(source1, source2).scan(
  function (arr, item) { 
    if (!magic) { 
      return arr.push(item); 
    }
    else { 
      return [item]; //Clear the buffer from previous items
    } 
  }, []);
我还希望有一个缓冲区的“消费者”,它将项目从缓冲区中转移出来,并对它们进行处理。我如何实现这一点并确保消费者更新可观察的缓冲区

编辑:我想将数据输入到,但只允许在不更新时向其追加数据。我想这给了我一个背压的情况。因此,我尝试创建了一个,但不知道如何使用自己的缓冲创建自己的版本

因此,我有一个基本的缓冲区,它将从source1和source2到数组的所有内容追加到一个数组中。在某些情况下,缓冲区被清除

您在这里需要做的是:

var sourceStream = Rx.Observable.merge(soruce1, source2);

var boundary = sourceStream.lift(someOperator) // for example sourceStream.skip(3);
// someOperator is where you perform the "magic"

var subscribeToThisStream = sourceStream.buffer( boundary ); 
// emits all items collected in the buffer between two boundary emitions
我还希望有一个缓冲区的“消费者”,它将项目从缓冲区中转移出来,并对它们进行处理。我如何实现这一点并确保消费者更新可观察的缓冲区


如果您希望通过订阅者进行此操作,如果您希望以接收方式进行操作,则绝对不可取,在某些情况下甚至不可能

请在问题中添加更多细节。这只是一个愚蠢的问题-
lift
的签名是什么?我找不到它,但我确信我在讨论RxJS的内部实现时见过这种方法。那么,它是如何工作的呢?谢谢你的回答,tMJ,我已经用更多的内容更新了我的问题details@oskbor我看不出你是否已经得到了答案,或者你是否还不清楚什么。让我know@ErykNapierala无论何时应用任何操作符,比如说
source.map(x=>y)
它在内部表示为
source.lift(new-MapOperator(x=>y))
(至少在RxJava中是这样的,我认为它在所有实现中都是类似的)好的,我明白了。谢谢据我所知,
lift
仅在中实现,当前版本没有在公共API中提供此方法。