У меня есть эта функция, которая возвращает impl Future<Output = Result<Vec<Image>, reqwest::Error>>
без каких-либо проблем. Компилятор ни на что не жалуется:
fn future_images<'a>(
image_ids: &'a str,
client: &'a Client,
file_id: &'a str,
frames: &'a [Node],
scale: usize,
format: &'a str,
) -> impl Future<Output = Result<Vec<Image>, reqwest::Error>> + 'a {
get_images_url_collection(image_ids, client, file_id, scale, format)
.map_ok(move |urls| to_images(frames, &urls, scale, format))
}
Я тестировал, чтобы добавить это MapOk
будущее к вектору фьючерсов внутри функции, но затем я получаю ошибку компилятора, которая говорит expected type parameter impl Future<Output = Result<Vec<Image>, reqwest::Error>> + 'a, found struct futures_util::future::try_future::map_ok::MapOk
. Вы можете увидеть код ниже.
fn future_images2<'a>(
futures: &mut Vec<impl Future<Output = Result<Vec<Image>, reqwest::Error>> + 'a>,
image_ids: &'a str,
client: &'a Client,
file_id: &'a str,
frames: &'a [Node],
scale: usize,
format: &'a str,
) {
let fim = get_images_url_collection(image_ids, client, file_id, scale, format)
.map_ok(move |urls| to_images(frames, &urls, scale, format));
futures.push(fim);
}
Почему это происходит здесь, а не в первой функции? Почему компилятор ведет себя по-другому?