gpt4 book ai didi

asynchronous - 如何在异步函数中使用谓词?

转载 作者:行者123 更新时间:2023-12-03 11:31:13 27 4
gpt4 key购买 nike

我使用 thirtyfour在我的 Rust 脚本中,它使用 tokio作为异步运行时。

当我在 Vec::iter 中使用 find 时,它没有像我预期的那样工作:

#[tokio::main]
async fn main() -> WebDriverResult<()> {
let dropdown = driver.find_element(By::Tag("select")).await?;
dropdown
.find_elements(By::Tag("option"))
.await?
.iter()
.find(|&&x| x.text() == book_time.date) // Error, x.text() return a futures::Future type while book_time.date return a &str.
.click()
.await?;
}

在我尝试之后Ibraheem Ahmed's solution ,我遇到了更多错误:

let dropdown = driver.find_element(By::Tag("select")).await?;
let elements = dropdown.find_elements(By::Tag("option")).await?;
let stream = stream::iter(elements);
let elements = stream.filter(|x| async move { x.text().await.unwrap() == target_date });
error: lifetime may not live long enough
--> src\main.rs:125:38
|
125 | let elements = stream.filter(|x| async move { x.text().await.unwrap() == target_date });
| -- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ returning this value requires that `'1` must outlive `'2`
| ||
| |return type of closure is impl futures::Future
| has type `&'1 thirtyfour::WebElement<'_>`

最佳答案

the Rust User's Forum 上有一个很好的话题涵盖了类似的问题。

我通过修改 thirtyfour tokio_async example 来尝试下面的代码片段.我没有你的完整上下文,所以我创建了一个示例,它根据 wikipedia.org 主页上的文本找到了一个链接。

  1. filter_map .

    let target_value = "Terms of Use";
    let found_elements: Vec<_> = stream
    .filter_map(|x| async move {
    if let Ok(text) = x.text().await {
    if text == target_value {
    println!("found");
    return Some(x);
    }
    }
    None
    })
    .collect()
    .await;
  2. while 循环(这可能不是您想要的,但如果您的逻辑很容易融入其中,这可能是一个简单的解决方案)...

    while let Some(element) = stream.next().await {
    let text = element.text().await?;
    println!("link text result: {}", text);
    }

关于asynchronous - 如何在异步函数中使用谓词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65912105/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com