繁体   English   中英

Rust:异步查找(在谓词中使用 await)

[英]Rust: Async find (use await within predicate)

我正在尝试在查找谓词中使用异步。 我们可以使用 find 方法在迭代器中查找元素,如下所示:

let element = some_elements.iter().find(|element| {
  // some_async_method(element).await;
  // true or false based on some logic
});

就我而言,我需要调用异步方法作为查找逻辑的一部分。 但是,当我使用 await 时,我最终遇到无法在非异步块中调用 await 的错误,这是预期的。 当我尝试按如下方式使我的函数异步时:

let element = some_elements.iter().find(|element| async move{
  // some_async_method(element).await;
  // true or false based on some logic
});

我收到错误:预期bool ,发现不透明类型

我尝试使用人造丝,但找不到我正在寻找的示例。

您可以使用futures::stream::iter将迭代器变成Stream

由于find没有在StreamExt上实现,我在下面用filter().next()替换了它:

use futures::stream::StreamExt;
//…
let element = futures::stream::iter(&some_elements)
    .filter(|e| Box::pin(async move { predicate(e).await }))
    .next()
    .await;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM