You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rust中`.await?`语法是什么?为何能这样使用?

关于.await?的用法解析

你之前的误解在于:.await本身只是用来等待异步任务完成的操作,但它等待的异步任务的最终返回值完全可以是Result类型,这就是为什么能把.await和?结合起来用。

拿你贴的reqwest代码举例:

  1. client.get(...).header(...).send() 会返回一个异步任务(实现Future trait的类型),这个任务完成后给出的结果是 Result<reqwest::Response, reqwest::Error>——也就是说,异步请求可能成功拿到响应,也可能失败返回错误。
  2. 调用.await就是等待这个异步任务结束,拿到它的最终结果(也就是那个Result),这时候用?就和普通Result用?完全一样:如果是Ok就提取里面的Response继续往下走,如果是Err就直接把错误返回给当前函数的调用者。
  3. 后面的.json::<GETAPIResponse>()同理,它返回的异步任务完成后给出的是Result<GETAPIResponse, reqwest::Error>,.await拿到这个Result后再用?提取最终的API响应结构体。

再举个更简单的例子帮你理解:

// 一个返回Result的异步函数
async fn fetch_number() -> Result<i32, &'static str> {
    Ok(42)
}

async fn run() -> Result<(), &'static str> {
    // fetch_number()返回Future,.await后拿到Result<i32, &str>,用?提取Ok值
    let num = fetch_number().await?;
    println!("拿到的数字:{}", num);
    Ok(())
}

本质上,.await的作用是把异步任务的最终结果“取出来”,如果这个结果是Result,那自然可以用?来处理错误。

内容的提问来源于stack exchange,提问作者Finlay Weber

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 00:40:39