Getting a Future from a Vector and a function
I think the best is to simply use then() and collect():

use futures::{Future, StreamExt};

pub async fn traverse&lt;I, T, F, Fut, O&gt;(xs: I, f: F) -&gt; Vec&lt;O&gt;
where
    I: IntoIterator&lt;Item = T&gt;,
    F: Fn(T) -&gt; Fut,
    Fut: Future&lt;Output = O&gt;,
{
    futures::stream::iter(xs).then(f).collect().await
}


Note:


futures generic should be name Fut
function generic should be name F
I rename R as O but I don't know if it's better but it's my way.
Doesn't need FutureExt