我需要与withLatestFrom类似的内容,对应下图:
---------A-----------------B--
-1-2-3------4------5-6-7-8----
--------[A,[123]]---------------[B,[45678]]
有没有办法用RxJS实现这种行为?
答案 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();
它产生:
这是翻译过的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