此问题已在此处有答案:
What is the idiomatic way to handle/unwrap nested Result types?(2个答案)
14小时前关闭
我正在学习使用rust v1.65.0
发送http请求。现在我有一个像这样的rust代码块:
pub async fn get_queue_cv() {
let client = Client::new();
let url_path = "/cv/gen/v1/list";
let url = format!("{}{}", get_app_config("cv.cv_api_url"), url_path);
let response = client
.post(url)
.headers(construct_headers())
.body("{}")
.send()
.await;
match response {
Ok(r) => {
let r: serde_json::Value = r.json().await.unwrap();
match r.get("result") {
Some(_) => {},
None => {},
}
let result: &serde_json::Value = r.get("result").unwrap();
let first_element = result.get(0).unwrap();
let queue_record: CvGen = serde_json::from_value(first_element.clone()).unwrap();
let tpl_resp = get_template(queue_record);
tpl_resp.await;
}
Err(e) => println!("Error: {}", e),
}
}
这段代码工作正常,但有时当服务器返回null结果时,解包会出现异常。现在我想处理解包失败的情况,我试图使用匹配,但现在我发现使用匹配使代码有太多的嵌套层次和maket代码丑陋。我想要的只是简单地返回,如果任何unwrap失败。我试过unwrap_or_else
,但我不知道如何定义else条件。我该怎么做才能用更好的方法处理这个拆封?
1条答案
按热度按时间o8x7eapl1#
你可以通过下面的
Option
方法来尝试一个“Maybe”monad方法: