Rust 异步编程:处理 send_post() 函数异常

以下代码展示了一个使用 Rust 异步编程处理 send_post() 函数异常的示例。

async fn main() {
    // let input_buf=get_user_input();

    // println!("{}",input_buf);
    if let Ok(res) = send_post().await {
        println!("result is :{:#?}", res);
    } else {
        println!("hello")
    }
}

// 获取用户键盘输入
fn _get_user_input() -> String {
    let mut input_buf = String::new();
    let _input = io::stdin().read_line(&mut input_buf).expect("fail to get user input.");
    input_buf
}

async fn send_post() -> Result<serde_json::Value, reqwest::Error> {
    let client = reqwest::Client::new();
    // post 请求头
    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("unsolve the userAgent header value."),
    );
    header.insert("referer", "https//www.covery.com".parse().expect("unsolve the referer value."));
    header.insert("sec-ch-ua", "sec-ch-ua".parse().expect("ms"));

    // post 请求体
    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?)
}


为什么输出 else 语句内容:

如果 send_post() 函数中发生了错误,会返回一个 Err,因此在 main 函数中通过 if let Ok(res) = send_post().await 语句判断 send_post() 函数是否正常执行。如果返回的是 Ok,则打印结果;如果返回的是 Err,则执行 else 语句打印 "hello"。因此,只有当 send_post() 函数出现异常时,才会输出 else 语句。

代码解释:

  1. send_post() 函数: 发送 POST 请求,并返回一个 Result 类型的值。如果请求成功,则返回 Ok(serde_json::Value),否则返回 Err(reqwest::Error)。
  2. main() 函数: 使用 if let 语句判断 send_post() 函数执行结果。如果 send_post() 函数成功执行,则将返回值赋给 res 变量,并打印结果;如果 send_post() 函数出现异常,则执行 else 语句,打印 "hello"。

代码要点:

  • 使用 Result 类型处理函数返回值,方便判断函数执行结果。
  • 使用 if let 语句简洁地判断 Result 类型的值。
  • 使用 await 关键字等待异步操作完成。

总结:

本示例演示了在 Rust 异步编程中如何处理 send_post() 函数的异常情况,并展示了如何使用 if let 语句判断函数执行结果,以实现对异常情况的处理。

Rust异步编程:处理send_post()函数异常

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

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