Rx.Net到目前为止还没有等效的concatMap,但是在可以使用的功能允许的情况下,可以肯定地有一种类似的行为。我现在有CallFunction () {
console.log("Event was called");
}
render(){
return(
<div>{this.CallFunction()}</div>
);
}
,其中observable.SelectMany(x => ProcessItemAsync(item).ToObservable())
是一个异步方法,我想按一个顺序执行,而不是一次执行所有项目。
如果我正确理解Rx,ProcessItemAsync
应该这样做,但是Rx.Net中目前不存在它,那么实现相同行为的另一种方式是什么?
我可能有多个可观察的源,并且每个源都可以并行执行observable.ConcatMap(x => ProcessItemAsync(item).ToObservable())
,它应该只在流顺序内,以保持输入/输出顺序,因此我无法锁定它在ProcessItemAsync
答案 0 :(得分:0)
编辑:在这里找到了更简单的解决方案:Answer to Reactive Extensions SelectMany and Concat
在下面粘贴到LINQPad进行尝试
onPause
(在原始文章中,我做了一个扩展方法,选择/映射了给定的异步Func。然后我做了一个类,在其中等待结果,对其进行索引和存储,以便按顺序发出结果。)
答案 1 :(得分:-1)
在这里跟进我的评论是建议的解决方案。
相反
.Select(x => LongProcessAsync(x).ToObservable())
使用以下内容:
.Select(x => Observable.Create<int>(async o =>
{
try
{
var result = await LongProcessAsync(x);
o.OnNext(result);
o.OnCompleted();
}
catch (Exception ex)
{
o.OnError(ex);
}
}))