我正在对通过 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/