为飞镖中的每个发射生成带有延迟的流

时间:2019-01-03 15:19:28

标签: dart reactive rxdart

我想从列表中以特定的Dart延迟发出流中的值。

因此,从[1,2,3](这是一个常规列表),我想在单独的事件中发出类似1...2...3的值。

我尝试过这样的事情

List<int> myList = [1,2,3];
Subject _current = BehaviorSubject<int>();
Stream<int> get current$ => _current.stream.delay(Duration(seconds:1));

myList.forEach(current.add);

但是我得到的是...123,所以这会使整个流延迟1秒,而不是列表中的每个值。

有什么想法吗? 谢谢

4 个答案:

答案 0 :(得分:1)

使用 rxdart 0.25.0 的一种解决方案:

final Stream<int> stream = 
    Rx.range(1, 3)
      .asyncExpand((event) => 
        event == 1
        ? Stream.value(event) // return first value immediately
        : Rx.timer(event, Duration(seconds: 1))
    );

答案 1 :(得分:0)

rxdart

软件包提供了一个delay转换器或方法来实现

new Observable.fromIterable([1, 2, 3, 4])
  .delay(new Duration(seconds: 1))
  .listen(print); // [after one second delay] prints 1, 2, 3, 4 immediately

还有其他类似debounce

答案 2 :(得分:0)

我设法使其正常工作

Observable.range(myList)
  .concatMap((i) =>
    new Observable.timer(i, new Duration(seconds: 1))
  .listen(print);

来自rxdart文档本身。感谢Günter的提示。

答案 3 :(得分:0)

使用 interval 包中的 rxdart

Stream.fromIterable(List<int>.generate(100, (i) => i))
        .interval(Duration(milliseconds: 10))
        .listen((v) {
      print(v);
});