我有以下内容:
struct Foo {
id: u32,
}
impl Foo {
async fn get(id: u32) -> Result<Self, Box<dyn Error>> {
Ok(Self{ id })
}
async fn something() {
let ids = vec![1000, 1001];
// conceptually, I'd like to do something like this...
let result: Vec<Foo> = ids.iter().map(|id| Foo::get(id).await.unwrap()).collect();
}
显然,我不能在附件中使用wait,我尝试了几种不同的方法来使用futures::使用iter()、map()、collect()和wait的流,但都不能通过Vec,有什么建议吗?
1条答案
按热度按时间oprakyz71#
你可以把闭包的主体封装在一个
async
块中,把你的ids
转换成Future<Output = Foo>
的vec,然后使用futures::future::join_all
函数来同时等待它们(或者,使用try_join_all
函数来得到一个结果,这可能更好):Playground.
try_join_all
函数,不需要使用异步块。