预期的结构`Vec`,在tokio,缓存和匹配中找到枚举`Result`

expected struct `Vec`, found enum `Result` in tokio, cacache and match

我很难理解下面的代码有什么问题。我在 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)情况传播到当前函数之外,回想一下 the ? operator unwraps a Result(或 Option)。因此,这个表达式:

cacache::read("./cache", url).await?

具有类型 Vec<u8>,因为 ? 运算符已展开 Result。如果您想自己处理错误,请省略 ? 运算符:

cacache::read("./cache", url).await