【问题标题】:How do I make a method that returns a stream<T> after modifying another stream<U>如何在修改另一个流<U> 后创建一个返回流<T> 的方法
【发布时间】:2021-11-20 00:59:36
【问题描述】:

我想创建一个 helpfer 方法,该方法从库中获取一个流(在本例中为绘制)并将流从 Stream&lt;UserContent&gt; 更改为 Stream&lt;Submission&gt; 并过滤提交的内容以查找错误。

到目前为止,我有这段代码,但我现在如何返回流?

  Stream<Submission> getSavedPosts({int limit = 20}) async* {
    yield await _me!.saved(limit: limit).map((UserContent userContent) async {
      try {
        Submission sub = await _populateUserContent(userContent);
        if (_filterPost(sub)) {
          return sub;
        }
      } catch (err) {
        print(err);
      }
    }); // The type 'Stream<Stream<Future<Submission?>>>' implied by the 'yield' expression must be assignable to 'Stream<Submission>'.
  }

【问题讨论】:

  • 您可能应该在每次迭代中使用await for loop,然后使用yield sub
  • 您不应该使用yield,只需使用return 并使用asyncMap 代替map

标签: flutter dart asynchronous filter stream


【解决方案1】:

您应该在流上使用asyncMap 方法而不是map

Stream<ClassA> getOldStream() {}

Stream<ClassA> getNewStream() {
  return getOldStream().asyncMap((event) async {
    return event;
  });
}

注意:yieldasync* 应该在生成器函数中使用;映射不需要生成器函数

【讨论】:

  • 谢谢你为我做了这件事!
猜你喜欢
  • 1970-01-01
  • 2022-01-05
  • 2023-01-29
  • 1970-01-01
  • 1970-01-01
  • 2015-09-23
  • 1970-01-01
  • 2021-02-19
  • 2014-09-08
相关资源
最近更新 更多