使用LatestFrom进行缓冲

时间:2016-01-28 22:14:23

标签: javascript rxjs reactive-programming

我需要与withLatestFrom类似的内容,对应下图:

---------A-----------------B--
-1-2-3------4------5-6-7-8----

--------[A,[123]]---------------[B,[45678]]

有没有办法用RxJS实现这种行为?

2 个答案:

答案 0 :(得分:2)

我很抱歉我不是一个javascript编码器,但这适用于.NET。希望你能翻译。

var xs = new Subject<string>();
var ys = new Subject<string>();

var qs =
    xs.Publish(pxs =>
        ys.Buffer(() => pxs)
            .Zip(pxs, (numbers, letter) => new { letter, numbers }));

.Publish(pxs =>运算符只接受一个observable,只订阅一次并在lambda中共享该订阅。它阻止了对源的多个订阅,并同步lambda中pxs的值的生成。

ys.Buffer(() => pxs获取ys的所有值,并将值转换为在pxs生成值时分解的一系列列表。

最后,.Zip(...)获取pxs中的值并将其与.Buffer(...)生成的列表配对。

qs.Subscribe(q => Console.WriteLine(q));

ys.OnNext("1");
ys.OnNext("2");
ys.OnNext("3");
xs.OnNext("A");
ys.OnNext("4");
ys.OnNext("5");
ys.OnNext("6");
ys.OnNext("7");
ys.OnNext("8");
xs.OnNext("B");

ys.OnCompleted();
xs.OnCompleted();

它产生:

result

这是翻译过的javascript版本:

var qs = xs.publish(
    pxs =>
      ys.buffer(() => pxs).zip(pxs, (numbers, letter) => [ letter, numbers ])
);

答案 1 :(得分:1)

This似乎正在发挥作用。它基于let brown = UIColor(rgb: 0xBE5300) // BE5300 is the hex value 运算符,但还有其他方法可以执行相同操作。

sample