【问题标题】:How to fix select_all returning only one result instead of multiple results如何修复 select_all 只返回一个结果而不是多个结果
【发布时间】:2022-12-13 13:06:50
【问题描述】:

我的代码可以归结为以下内容:

let client = reqwest::Client::new();
let endpoints = vec!['http://google.com', 'http://www.yahoo.com', 'http://example.com'];
let futures: Vec<_> = endpoints.iter().map(|endpoint| {
            return client
                .get(endpoint)).send();
}).collect();

let (item_resolved, _remaining_futures, _last) = select_all(futures).await;
let mut responses = vec![];

for item in item_resolved {
    responses.push(item.json::<ResponseStruct>().await);
}

dbg!(responses);

问题是响应只包含一个结果。我希望它是调用端点的结果。

【问题讨论】:

  • select_all()给出了第一个结果。也许你想要join_all()
  • 该死!我想如果 select_ok 给出第一个结果,那么 select_all 应该得到所有结果!
  • 不,select_all() 给出第一个结果,select_ok() 给出第一个成功的结果。 select()给出了只有两个期货的第一个结果。
  • 如果你想要所有成功的结果,试试try_join_all()
  • 我想我想要一个 join_all 但能够知道哪些端点导致了错误。

标签: rust rust-tokio rust-async-std


【解决方案1】:

这可以通过 futures 箱子中的 FuturesUnordered 来实现。

这是我刚刚从另一个答案中分享的一个例子:https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=7f2faf54cec2267b7c6b0839439dea0d

【讨论】:

    猜你喜欢
    • 2018-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-29
    相关资源
    最近更新 更多