0

我想进行几次定期 REST API 调用并将所有响应合并到一个流中。StreamGroup 可以做到这一点,但是否可以在运行时将新流合并到现有流?假设我有两个周期性流,我将它们与 StreamGroup 合并为一个流。在创建后(因此之后),如何将新的stream.periodic(例如getC())添加/合并到已经存在的 Stream中?stream StreamGroup.merge(streamList)


import 'package:async/async.dart' show StreamGroup;

// ... 
Stream<dynamic> stream;
var streamList = <Stream>[];

// ...

void addPeriodicCallToA({Duration period}) {
    streamList.add(Stream<dynamic>.periodic(period, (x) async {
      return await getA();
    }));
  }

// ...

void addPeriodicCallToB({String symbol, Duration period}) {
    streamList.add(Stream<dynamic>.periodic(period, (x) async {
      return await getB(symbol: symbol);
    }));
  }

// ...

addPeriodicCallToA(period: Duration(seconds: 1));
addPeriodicCallToA(period: Duration(symbol: 'yoloandswaglol', seconds: 2));
stream = StreamGroup.merge(streamList);

4

1 回答 1

0

我还没有完全测试过这个,但是你有没有试过直接将流添加到StreamGroup这样的:

import 'package:async/async.dart' show StreamGroup;

// ... 
StreamGroup streamGroup = StreamGroup(); //<-- create StreamGroup
Stream<dynamic> stream;

// ...

void addPeriodicCallToA({Duration period}) {
    // Add to streamGroup
    streamGroup.add(Stream<dynamic>.periodic(period, (x) async {
      return await getA();
    }));
  }

// ...

void addPeriodicCallToB({String symbol, Duration period}) {
    // Add to streamGroup
    streamGroup.add(Stream<dynamic>.periodic(period, (x) async {
      return await getB(symbol: symbol);
    }));
  }

// ...

addPeriodicCallToA(period: Duration(seconds: 1));
addPeriodicCallToA(period: Duration(symbol: 'yoloandswaglol', seconds: 2));
stream = streamGroup.stream; // <-- set to stream object
于 2021-12-10T02:30:14.130 回答