Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
System.reactive ,将source更改为以下内容可以让您更接近(我想,我还是不确定):_System.reactive_Rxjs5 - Fatal编程技术网

System.reactive ,将source更改为以下内容可以让您更接近(我想,我还是不确定):

System.reactive ,将source更改为以下内容可以让您更接近(我想,我还是不确定):,system.reactive,rxjs5,System.reactive,Rxjs5,这将产生以下输出: Next: source 1: 0 Next: source 1: 1 Next: source 2: 1 Next: source 3: 1 Next: source 4: 1 Next: source 5: 1 Next: source 5: 2 Next: source 5: 3 Next: source 5: 4 Next: source 5: 5 Next: source 5: 6 Next: source 5: 7 Next: source 5: 8 Next:

这将产生以下输出:

Next: source 1: 0
Next: source 1: 1
Next: source 2: 1
Next: source 3: 1
Next: source 4: 1
Next: source 5: 1
Next: source 5: 2
Next: source 5: 3
Next: source 5: 4
Next: source 5: 5
Next: source 5: 6
Next: source 5: 7
Next: source 5: 8
Next: source 5: 9
Completed

这对我来说很有意义。如果您可以发布所需的输出,我将帮助您实现。

我强烈建议您发布所需的输出。你想要什么还不清楚。对于C#示例,将源代码更改为以下代码可以让您更接近(我想,我还是不确定):

这将产生以下输出:

Next: source 1: 0
Next: source 1: 1
Next: source 2: 1
Next: source 3: 1
Next: source 4: 1
Next: source 5: 1
Next: source 5: 2
Next: source 5: 3
Next: source 5: 4
Next: source 5: 5
Next: source 5: 6
Next: source 5: 7
Next: source 5: 8
Next: source 5: 9
Completed

这对我来说很有意义。如果您可以发布所需的输出,我将帮助您达到目标。

您希望看到什么?我希望看到每个源的2个值,因为每个源在开始发射时都有另一个时间点。发现此:开关不是选项:“请注意,当源可观测对象发出新的可观测对象时,它将取消订阅先前发出的可观测对象,而不是当新的可观测对象发出项目时。“你希望看到什么?我希望看到来自每个源的2个值,因为每个源在开始发射时都有另一个时间点。发现:开关不是一个选项:”注意,当源可观测发射新的可观测时,它将取消订阅先前发射的可观测,而不是当新的可观测发射项目时。“IIUC这个人在使用之前我必须调用
source.connect()
,对吗?@MarkusW.No,在
.Publish(选择器):IObservable
.Publish():IConnectableObservable
。这个答案是使用Rx.netsyntrax而不是RxJs.IIUC这个人,我必须调用
source.connect())
在使用之前,对吗?@MarkusW.No,在
.Publish(选择器):IObservable
.Publish()之间有区别:IConnectableObservable
。此外,这个答案是使用Rx.Net syntrax而不是RxJs。虽然我将此标记为解决方案,但在类型不安全的JavaScript中仅此而已。在RxJs 5.0.0-beta.10中,发布的签名已更改,因此您无法再平面映射序列,因为类型不得更改:
导出函数发布(选择器?:(来源:可观察)=>可观察):可观察|可连接可观察{
.Ouch.@MarkusW.Ouch,我正在填补一个问题。@MarkusW.另外,如果
源代码
是冷的,但内部观察值是热的,这个解决方案效果最好。它也可以处理冷的,但最终会订阅多次。如果它们不热,你可以添加
源代码.map(src=>src.share()).publish(src=>src
到第一行。但我知道它们在实践中对您来说已经很热门了。虽然我将此标记为解决方案,但在类型不安全的JavaScript中,它只是这样。在rxjs 5.0.0-beta.10中,publish的签名已更改,因此您无法再平面映射序列,因为类型不得更改:
export function publish(选择器?:(来源:Observable)=>Observable):Observable | ConnectableObservable{
.Ouch.@MarkusW.Ouch,我正在填补一个问题。@MarkusW.另外,如果
源代码
是冷的,但内部观察值是热的,这个解决方案效果最好。它也可以处理冷的,但最终会订阅多次。如果它们不热,你可以添加
源代码.map(src=>src.share()).publish(src=>src
到第一行。但我知道它们在实践中对你来说已经很热门了。
Next: source 5: 0
Next: source 5: 1
Next: source 5: 2
Next: source 5: 3
Next: source 5: 4
Next: source 5: 5
Next: source 5: 6
Next: source 5: 7
Next: source 5: 8
Next: source 5: 9
Completed
   let originalSequence = Observable.timer(0, 1000).take(10).share();

   let empty = Observable.empty();
     let source = Observable.range(1, 5)
      .map(i =>
      originalSequence.delay(i * 2000).map(x => "source " + i + ": " + x))
    .reduce((s1, s2) => s1.takeUntil(s2).concat(s2), empty)
    .mergeAll(); 
 let empty = Observable.empty();
     let source = Observable.range(1, 5)
      .map(i =>
      Observable.timer(i * 2000, 1000).map(x => "source " + i + ": " + x).take(10).share())
    .reduce((s1, s2) => s1.takeUntil(s2).concat(s2), empty)
    .mergeAll();
using System;
using System.Linq;
using System.Reactive.Linq;
using System.Threading;

namespace RxScanProblem
{
    class Program
    {
        static void Main(string[] args)
        {
            var originalSequence = Observable.Timer(TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(1)).Take(10).Select(i => (long)i).Publish();

            var empty = Observable.Empty<string>();
            var source = Observable.Range(1, 5)
             .Select(i => originalSequence.Delay(TimeSpan.FromSeconds(2 * i)).Select(x => "source " + i + ": " + x))
             .Aggregate(empty, (s1, s2) => s1.TakeUntil(s2).Concat(s2))
             .SelectMany(x => x);

            source.Subscribe(
                s => Console.WriteLine("Next: " + s),
                ex => Console.WriteLine("Error: " + ex.Message),
                () => Console.WriteLine("Completed"));

            originalSequence.Connect();

            // Dirty, I know
            Thread.Sleep(20000);
        }
    }
}
Next: source 1: 0
Next: source 1: 1
Next: source 1: 2
   let empty = Observable.empty();
     let source = Observable.range(1, 5)
      .map(i => Observable.timer(i * 2000, 1000).map(x => "source " + i + ": " + x).take(10))
      .switch();
Next: source 5: 0
Next: source 5: 1
Next: source 5: 2
Next: source 5: 3
Next: source 5: 4
Next: source 5: 5
Next: source 5: 6
Next: source 5: 7
Next: source 5: 8
Next: source 5: 9
   var originalSequence = Observable.Timer(TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(1)).Take(10).Select(i => (long)i).Publish();

    var empty = Observable.Empty<string>();
    var source = Observable.Range(1, 5)
     .Select(i => originalSequence.Delay(TimeSpan.FromSeconds(2 * i)).Select(x => "source " + i + ": " + x))
     .Switch();
  let source = Observable.range(1, 5)
    .map(i =>
      Observable.timer(i * 2000, 1000).map(x => "source " + i + ": " + x).take(10))
    .reduce((s1, s2) => s1.takeUntil(s2).concat(s2), empty)
    .mergeAll();
s1 = Observable.timer(1 * 2000, 1000).map(x => "source 1: " + x).take(10));
s2 = Observable.timer(2 * 2000, 1000).map(x => "source 2: " + x).take(10));
s3 = Observable.timer(3 * 2000, 1000).map(x => "source 3: " + x).take(10));
s4 = Observable.timer(4 * 2000, 1000).map(x => "source 4: " + x).take(10));
s5 = Observable.timer(5 * 2000, 1000).map(x => "source 5: " + x).take(10));
s1.takeUntil(s2).concat(s2)
   .takeUntil(s3).concat(s3)
   .takeUntil(s4).concat(s4)
   .takeUntil(s5).concat(s5)
s1               --0123456789
s2               ----0123456789
s3               ------0123456789
s4               --------0123456789
s5               ----------0123456789
s1.takeUntil(s2) --01|
  .concat(s2)    --01----0123456789
  takeUntil(s3)  --01--|
  .concat(s3)    --01--------0123456789
  takeUntil(s4)  --01----|
  .concat(s4)    --01------------0123456789
  takeUntil(s5)  --01------|
  .concat(s5)    --01----------------0123456789
source.publish(src => src
  .flatMap(inner1 => 
    inner1.takeUntil(src.flatMap(inner2 => inner2.take(1)))
  ))
var source = Observable.Range(1, 5)
    .Select(i => originalSequence
        .Delay(TimeSpan.FromSeconds(2 * i))
        .Select(x => "source " + i + ": " + x)
    )
    //making sure s2 is shared properly, thus concated properly
    .Aggregate(empty, (s1, s2) => s2.Publish( _s2 => s1
        .TakeUntil(_s2)
        .Concat(_s2)
    ))
    .SelectMany(x => x);
Next: source 1: 0
Next: source 1: 1
Next: source 2: 1
Next: source 3: 1
Next: source 4: 1
Next: source 5: 1
Next: source 5: 2
Next: source 5: 3
Next: source 5: 4
Next: source 5: 5
Next: source 5: 6
Next: source 5: 7
Next: source 5: 8
Next: source 5: 9
Completed