我尝试在find predicate 中使用async。我们可以使用find方法在迭代器中查找元素,如下所示:
let element = some_elements.iter().find(|element| {
// some_async_method(element).await;
// true or false based on some logic
});
在我的例子中,我需要调用async方法作为查找逻辑的一部分。然而,当我使用await时,我最终遇到了一个错误,即await不能在非async块中调用,这是意料之中的。当我尝试将我的函数设置为async时,如下所示:
let element = some_elements.iter().find(|element| async move{
// some_async_method(element).await;
// true or false based on some logic
});
我得到错误:应为bool
,找到不透明类型
我试着用人造丝,但找不到我要找的例子。
1条答案
按热度按时间smdncfj31#
可以使用
futures::stream::iter
将迭代器转换为Stream
。由于
find
没有在StreamExt
上实现,我在下面的代码中将其替换为filter().next()
:如果你真的想异步地完成你的工作,你就必须稍微详细一点,并根据你的实际需求收集到
FuturesOrdered
/FuturesUnordered
中: