Javascript 理解groupJoin

Javascript 理解groupJoin,javascript,rxjs,Javascript,Rxjs,我不完全理解这个操作员 如何理解这些部分: 基于重叠持续时间关联两个序列的元素,并对结果进行分组 leftDurationSelector(函数):选择左可观察序列的每个元素的持续时间(表示为可观察序列)的函数,用于确定重叠。 rightDurationSelector(函数):选择右可观察序列的每个元素的持续时间(表示为可观察序列)的函数,用于确定重叠 从第四个论点: (可观察的)一个可观察序列,右序列的元素与左序列的元素重叠 为什么这里的第二个和第三个参数是这样的?计时器(0)对我们有什么

我不完全理解这个操作员

如何理解这些部分:

基于重叠持续时间关联两个序列的元素,并对结果进行分组

leftDurationSelector(函数):选择左可观察序列的每个元素的持续时间(表示为可观察序列)的函数,用于确定重叠。 rightDurationSelector(函数):选择右可观察序列的每个元素的持续时间(表示为可观察序列)的函数,用于确定重叠

从第四个论点:

(可观察的)一个可观察序列,右序列的元素与左序列的元素重叠

为什么这里的第二个和第三个参数是这样的?计时器(0)对我们有什么好处?我知道计时器(0)在0秒后返回值0并完成。那又怎样

var xs = Rx.Observable.interval(100)
    .map(function (x) { return 'first' + x; });

var ys = Rx.Observable.interval(100)
    .map(function (x) { return 'second' + x; });

var source = xs.groupJoin(
    ys,

    function () { return Rx.Observable.timer(0); },
    function () { return Rx.Observable.timer(0); },
    function (x, yy) {
        return yy.select(function (y) {
            return x + y;
        })
    }).mergeAll().take(5);

var subscription = source.subscribe(
    function (x) {
        console.log('Next: ' + x);
    },
    function (err) {
        console.log('Error: ' + err);
    },
    function () {
        console.log('Completed');
    });

也许您知道更好的解释来源?

为了更好地理解
groupJoin
,您应该查看以下来源。出于好奇,您使用此运算符的目的是什么?也许还有其他方法可以做到这一点。我还没有想到
groupJoin
的实用有趣的用法

  • (即规格,具体看第一个
    GroupJoinOp\u Normal\u i
我建议您按顺序查看这些资源(并从了解
加入
开始),然后花一些时间在大理石上了解发生了什么

关于官方文档示例,
timer(0)
基本上为您提供一个刻度的持续时间选择器。持续时间选择器仅用作信号,其值与输出无关。当持续时间选择器发出值或终止时,将发生填充(从两个流中发出分组值)。虽然它们既不发出值也不终止,但也会发生一些事情(将两个流中的值分组)


您传递的选择器函数接收分组值并从中计算其他值。使用
groupJoin
,选择器接收来自第一个源的值,以及来自第二个源的所有相关值的observable,您可以使用它执行任何逻辑操作。

在用户3743222发布应答后,我花了更多时间从该页面了解,我不断检查reactivex,但对于这个函数来说,很难理解那些从左向右有点角度的箭头

有提到的窗户。事实证明,这些箭头代表窗口

第二个和第三个参数是窗口宽度:

 function () { return Rx.Observable.timer(500); }
例如,上面的窗口宽度是500毫秒(假设在这种情况下,我们可以用时间单位测量宽度)

我画了一幅更像窗户的图形:

从我的图中,我们可以看到,例如,黑色窗口与绿色窗口相交,因此事件通过第四个参数中的函数连接

绿色和红色也一样

我没有调查其他案例,比如如果第一个流窗口中的多个事件与第二个流相交会发生什么,但至少我们知道它是如何工作的,如果出现一些意外的案例,可能其他人会添加信息


还需要进一步研究窗口宽度0,因为从视觉上看它们并不存在,我的意思是,如果有一个窗口,我想象它的宽度大于0。

我只是试图理解这一点,因为我认为它在以后用RxJS编写代码时可能会有用。稍后我们将检查这些资源