我发现很难理解下面的代码有什么问题。我在Ok(from_cache)
处得到expected struct Vec, found enum Result
错误,但我采用了https://github.com/platy/update-tracker/blob/843092708906063704442f352231bfbac5b06196/server/src/web/mod.rs#L216-L226
的代码在网页抓取过程中,我试图在缓存中缓存URL的内容并尝试重用它。
use std::error::Error;
#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
let url: &str = "https://example.com/";
let html = match cacache::read("./cache", url).await? {
Ok(from_cache) => String::from_utf8(from_cache),
Err(_) => {
let t_html = reqwest::get(url).await?.text().await?;
cacache::write("./cache", url, &t_html).await?;
t_html
},
};
println!("html = {:?}", html);
Ok(())
}
这里是playground(但是,它显示了由于缺少依赖而导致的其他错误)。谁能解释一下或分享任何相关的指南,以收集更多关于这个主题的信息?
回想一下,?
操作符通过在当前函数中传播Err
(或None
)情况来展开Result
(或Option
)。因此,这个表达式:
cacache::read("./cache", url).await?
具有类型Vec<u8>
,因为?
操作符已经打开了Result
。如果您想自己处理错误,那么省略?
操作符:
cacache::read("./cache", url).await