有没有办法等待返回Result <T,E>而不是T?

时间:2019-11-27 17:47:22

标签: asynchronous rust async-await

我正在使用reqwest通过以下功能在API上获取请求:

async fn get_item_response(client: &Client, id: &str) -> Result<Response, reqwest::Error> {
    let base = "http://someurl.com/item?={item_id}"
    .replace("{item_id}", id);
    client.get(&base).send()
}
async fn main() -> Result<(), Box<dyn Error>> {
    let client = Client::new();
    let response = get_item_response(&client, "1").await?;
}

响应是响应类型,而不是结果,这意味着如果不惊慌,我将无法检查是否发生了错误。 有没有办法访问结果?

1 个答案:

答案 0 :(得分:5)

?不是await的组成部分。它本身是一个运算符,它将解开有效值或返回错误值,并将其传播到调用函数。如果没有它,则必须自己检查结果:

match get_item_response(&client, "1").await {
    Ok(response) => /* do things with response */,
    Err(e) => /* deal with error */,
}