Rust 中异步函数 send_post() 错误处理和调试

问题:

在 Rust 代码中,如果 send_post() 函数执行失败,该如何捕获错误并打印错误信息?

解答:

  1. 捕获错误:

    main() 函数中,使用 if let Ok(res) = send_post().await 语句判断 send_post() 函数是否执行成功。如果返回 Ok,则打印结果;如果返回 Err,则执行 else 语句。

  2. 打印错误信息:

    else 语句中,使用 println!("Error {:?}", e); 打印具体的错误信息。

代码示例:

async fn main() {
    if let Ok(res) = send_post().await {
        println!("Result is {:#?}", res);
    } else {
        println!("Error {:?}", e);
    }
}

async fn send_post() -> Result<serde_json::Value, reqwest::Error> {
    let client = reqwest::Client::new();
    let mut header = HeaderMap::new();
    header.insert("User-Agent",
                  "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \
                  Chrome/110.0.0.0 Safari/537.36".parse().expect("Cannot parse User-Agent header value"),
    );
    header.insert("referer", "https//www.covery.com".parse().expect("Cannot parse referer header value"));
    header.insert("sec-ch-ua", "sec-ch-ua".parse().expect("Cannot parse sec-ch-ua header value"));

    let mut data = HashMap::new();
    data.insert("prompt", "hello");

    Ok(client.post("https://free-api.cveoy.com/v3/completions")
        .headers(header)
        .json(&data)
        .send()
        .await?
        .json::<serde_json::Value>()
        .await?)
}

说明:

  • send_post() 函数返回 Result<serde_json::Value, reqwest::Error> 类型,表示函数执行成功时返回 serde_json::Value,失败时返回 reqwest::Error 错误信息。
  • if let Ok(res) = send_post().await 语句用于捕获 send_post() 函数执行结果,并将成功返回的结果赋值给 res 变量。
  • else { println!("Error {:?}", e); } 语句用于捕获 send_post() 函数执行失败的错误信息,并将其打印到控制台。
  • esend_post() 函数返回的 Err 类型,其中包含具体的错误信息。

总结:

通过上述方法,你可以轻松地捕获 send_post() 函数执行过程中的错误,并打印出具体的错误信息,以便排查问题。


原文地址: https://www.cveoy.top/t/topic/lBMo 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录