rust - 有没有办法在 futures for_each 流中继续?

标签 rust future

我正在对通过 mspc::Receiver 接收的 future 流执行 for_each 循环

rx.for_each(move |trade| {
    if something_true {
        continue;
    }

    // down here I have computation logic which returns a future
});

我想按照上面的逻辑做一些事情。

当然,我可以只做一个 if/else 语句,但两个分支都必须返回相同类型的 future ,这对我来说很难做到,因为我在计算逻辑中生成的 future 是一长串困惑的 future .这让我想到是否真的有一种简单的方法来解决这个问题,比如继续或某种方式?

最佳答案

让我们分别解决这两个问题。首先,最简单的:如果你的 future 链里面for_each()不是同质的(他们很少会是),考虑返回一个盒装的 future (即 Box<dyn Future<Item = _, Error = _>> )。您可能需要将闭包返回类型强制转换为它,因为编译器有时不会得到您想要做的事情。

现在,对于“continue if condition”——这通常意味着您要过滤掉流中的某些元素,这表明要调用的更好的函数可能包括 filter()或中间状态 - 即返回项目类型为 Option<_> 的 future ,然后根据链中的下一个成员进行过滤。

关于rust - 有没有办法在 futures for_each 流中继续?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58171755/

相关文章:

scala - 以惯用方式链接 future 和期权

flutter - 如何从 Dart 中的 future 返回错误?

rust - 打印 Rust 中的所有结构字段

compiler-errors - std::marker::Sized 的虚假要求

casting - 为什么作为引用的迭代器项不转换为特征对象引用?

java - Callable 执行期间出现异常

multithreading - 保证 future 从某一点开始吗?

java - 使用 Map of Futures,如何通知()其中的单个元素?

rust - 如何阻塞直到两个接收器之一有可用数据?

rust - 你如何在 Rust 中使用父模块导入?