在为这里描述的问题找不到合适的解决方案后,我决定实施这个。
然而,我缺乏使用 monad 的经验,而像 Lift(..) 这样的东西对我来说仍然有点神奇......
我打开它的目的是让那些在 rxjava 之上实现了一些自定义东西的人可以就如何实现这一点给我建议。
现在这是什么,这是界面。
我想这对你们大多数人来说都是不言自明的,但为了确保我会举一个例子。
想象一下我们有一个订阅者(消费者)实际上对数据库进行持久化,很明显,如果你给它 1 或 1000 个对象来持久化,差异不会是 1000 的因数,它将是 10 的因数或更少,这意味着它是一个消费者可以通过加载......所以一次推送一个项目是愚蠢的,而你可以一次坚持很多,另一方面,等待一批 N 个元素填满直到你坚持(一个第二个你可能会得到 1000 个元素,你可能没有得到,所以假设我们不知道传入数据的频率)...
所以我们现在拥有的是Observable.batch()它会要求一些 N 大小的批次,我们经常会等待而不工作......另一方面,我们拥有Disruptor它完全符合我们想要的但不提供Observable......的漂亮界面Disruptor将处理单个元素,当您处理它时,它将收集所有传入的元素,下次您将获得一批由于您的消费者忙于处理最后一个值而收集的所有内容......
目前我想我将Observable.from()用来实现这个或lift()......
请分享您对此的想法,也许我不知道已经有可用的解决方案,或者我即将以错误的方式实现它......
我有一个连续变量(传单地图上的缩放),并且我想仅在此变量超过给定阈值(仅在给定缩放级别之后)时激活某些操作(多边形绘制)。
这是一个类似的 - 但更简单,更容易重现 - 玩具问题:
ui <- bootstrapPage(
sliderInput("slider", label='a number', min=100, max=400, value = 150),
plotOutput("plot")
)
server <- function(input, output, session) {
observeEvent(input$slider > 200, {
output$plot <- renderPlot(plot(rnorm(10000), rnorm(10000)))
})
}
shinyApp(ui, server)
Run Code Online (Sandbox Code Playgroud)
问题是,由于Shiny的反应性系统,情节(在玩具问题中)或地图(在实际问题中)不断更新,即使我希望它们仅在超过阈值时更新,在任一方向。
我试图用建筑observeEvent,eventReactive,reactiveValues,等夹杂if ... else声明。但似乎每当输入更新时,它都会触发整个事件链,无论因变量是否已更改。在玩具问题中,从到时input$slider > 200停留并不重要,它无论如何都会触发绘图。TRUEinput$slider100101
请告诉我我错了!
I'm very new to shiny and am having some trouble and have been searching all day, so hopefully someone can help me. Once an action button (actionButton, on UI) is selected by a user, I would like the server script to call a function (evenReactive in server) I wrote (myfunction, see below) that uses the input items from the UI and gets the right parameters I need to run myfunction and produce a n X2 data matrix that will be …
我有以下虚拟视图模型:
public class DummyViewModel : ReactiveObject
{
internal DummyViewModel()
{
ItemChanged.Subscribe(_ => Console.WriteLine());
}
public IObservable<string> ItemChanged
{
get { return this.WhenAnyValue(x => x.Item).Select(s => s); }
}
private string _item;
public string Item
{
get { return _item; }
set { this.RaiseAndSetIfChanged(ref _item, value); }
}
}
Run Code Online (Sandbox Code Playgroud)
当我创建这个类的一个新实例时,observable 立即在订阅时触发,返回 null(没有任何东西绑定到 Item)。这在我更高级的视图模型中导致了一个问题,我有多个 observable 需要以不同的方式链接在一起。我一直在使用 Skip 和 StartWith 的组合,但它变得非常复杂。有人可以建议为什么会发生这种情况以及我是否应该考虑采用不同的方法?
我有 vertx 版本 3.3.2 和 JUnit 版本 4.12 的 vertx 单元测试。以下单元测试永远不会完成:
@RunWith(VertxUnitRunner.class)
public class SomeVerticleTest {
private Vertx vertx;
@Before
public void before(TestContext context) {
vertx = Vertx.vertx();
vertx.deployVerticle(SomeVerticle.class.getName(), r -> context.asyncAssertSuccess()); // problem is in this line, see answer for solution!
}
@Test
public void doStuff(TestContext context) {
String encodedMessage = Json.encode("myMessage");
Async async = context.async();
vertx.eventBus().send("someVerticle", encodedMessage, asyncResult -> {
// some context.asserts on the message reply
async.complete(); // this line is executed, I can see it in …Run Code Online (Sandbox Code Playgroud) 我有一个发出 numbers 的流x。我想要的是dx(在 x 中的差异)所以我需要一个滚动缓冲区,它可以发出x_n,x_(n-1)所以我可以映射到dx = x_n - x_(n-1). 在大理石图中,这看起来像......
SOURCE --A------B------C--------D------F--G-----
RESULT ---------AB-----BC-------CD-----DF-FG----
Run Code Online (Sandbox Code Playgroud)
这对于滚动平均线等其他操作非常方便。
我检查了操作员文档,但似乎找不到任何类似的东西。sample有点接近,但取决于时间。buffer也很接近,但它严格地将值排队,缓冲区之间没有重叠。
我正在使用 RxJS
假设我有n Boolean Observables ( O1, O2,..., On) 发出标志,例如,复选框选择状态。
例如,对于n = 3,我们会有这样的东西(T=true和F= false):
O1 - T ------------------- F ----------------------- T ------
O2 - F ------------ T ---------------------------------------
O3 - T -------------------------- F -------- T --------------
Run Code Online (Sandbox Code Playgroud)
我想得到一个输出Boolean Observable(Oout),true当所有最新的排放量是true或false其他情况时发出。像这样的东西:
O1 - T ------------------- F ----------------------- T ------
O2 - F ------------ T ---------------------------------------
O3 - T -------------------------- F -------- T -------------- …Run Code Online (Sandbox Code Playgroud) 是否可以在 Shiny 应用程序(在 Windows 中)中拥有,说F7或Q触发反应流?这个问题提供了使用键盘输入交替选项卡的代码,但我对启动反应流感兴趣。例如,每次用户按下Q键盘时都会“触发”一个按钮。
是否有一种简单的方法可以在反应式编程中实现 Throttle 功能,而无需使用 RxSwift 或类似框架。
我有一个 textField 委托方法,我不想在每次插入/删除字符时触发它。
如何使用香草粉底做到这一点?
我想要实现的是这个(使用 Angular 2/Typescript):
Observable A 产生事件流。
对于 Observable A 的每个事件,进行 8 次不同的 http 调用。(8个切换图)
在所有 8 个请求返回后,做一些事情(订阅 8 个 switchmap 的 zip)。
对 Observable A 的每个事件重复 8 次请求(由 switchmap 和 zip 处理)
代码:(完整代码在https://plnkr.co/edit/44yqw0RYzC7v1TFACMx1)
let source = Observable
.interval(5000)
.take(100);
let requests = [];
for(let i=0; i<8;i++) {
let request = source.switchMap(x=> http.get('https://jsonplaceholder.typicode.com/users/'+(i+1))).publish();
request.subscribe(res => console.log(res.json()));
requests.push(request);
}
Observable.zip(requests)
.subscribe(console.log("All requests completed"));
requests.forEach(r => r.connect());
Run Code Online (Sandbox Code Playgroud)
问题是我的 zip 永远不会被调用。我控制台.记录了对 8 个 switchmap 中的每一个的订阅,并且每次在 Observable/stream A 中有一个事件时,我得到的日志显示 8 个 http 调用成功返回。(也可以在网络选项卡中看到 …
r ×3
shiny ×3
java ×2
javascript ×2
rx-java ×2
rxjs ×2
angular ×1
c# ×1
events ×1
function ×1
ios ×1
junit ×1
mvvm ×1
operators ×1
reactiveui ×1
swift ×1
throttling ×1
unit-testing ×1
vert.x ×1