gpt4 book ai didi

rust - 等待结果映射 future

转载 作者:行者123 更新时间:2023-11-29 07:48:32 25 4
gpt4 key购买 nike

我正在使用 future图书馆和我有一个实现 Future<T, E> 的 future .我想用函数 FnOnce(T) -> D 来映射这个 future 其中 D: From<E> .现在当我想 wait()为了这个 future ,我会得到一个Result<Result<T, E>, D> , 但是我想要 Result<T, D> .

为了更好地理解,这里有一些示例代码:

struct ReadError;

enum DownloadError {
Read(ReadError),
Parse(ParseError),
}

impl From<ReadError> for DownloadError { ... }

fn parse(bytes: [u8; 4]) -> Result<i32, DownloadError> { ... }

fn map_and_wait<F: Future<Item = [u8; 4]; Error = ReadError>>(f: F) -> Result<i32, DownloadError> {
match f.map(|x| parse(x)).wait() {
Ok(Ok(x)) => Ok(x),
Ok(Err(x)) => Err(x.into()),
Err(x) => Err(x),
}
}

执行此操作的最简单和最容易理解的方法是什么(无需 match ing)?

最佳答案

This is for futures v0.1 (old, experimental)

我找到了问题的答案:

您可以先等待 future 完成,使用? 返回潜在的错误,然后对其应用parse:

parse(f.wait()?)

这应该具有相同的语义,因为在轮询时,map 返回的 Future 会执行其闭包。另一种解决方案是映射可能的错误并使用 and_then:

f.map_error(|x| x.into()).and_then(|x| parse(x)).wait()

关于rust - 等待结果映射 future ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42489053/

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