期望的结构体' Vec ',找到enum ' Result '在tokio,缓存和匹配



我发现很难理解下面的代码有什么问题。我在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

相关内容

  • 没有找到相关文章

最新更新