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

Rust调用async函数报expected opaque type, found enum Result错误如何解决

报错原因
  1. async函数调用后不会直接返回你定义的返回值,而是返回一个Future类型的对象,必须通过.await等待它执行完成,才能拿到最终的Result结果
  2. 要在函数内部使用.await语法,当前函数必须也声明为async
  3. 原代码中日志宏的字符串拼接写法不符合Rust规范,Rust格式化宏不支持+运算符拼接变量
  4. 你当前定义的get_user_info返回的是Result<(), Error>,Ok分支没有返回任何有效用户数据,即使调用成功也拿不到用户信息
代码修改

第一步:修改get_user_info返回值,返回查询到的用户数据

use std::collections::HashMap;

pub async fn get_user_info(input_user_id:i64) -> Result<HashMap<String, String>, Box<dyn std::error::Error>> {
    let url = "http://dolphin-post-service.reddwarf-pro.svc.cluster.local:11014/post/user/";
    // 无需手动转'static字符串,直接拼接即可
    let resp = reqwest::get(format!("{}{}", url, input_user_id))
        .await?
        .json::<HashMap<String, String>>()
        .await?;
    println!("{:#?}", resp);
    // 返回查询到的用户数据
    Ok(resp)
}

第二步:修改接口handler函数,支持async和await

#[get("/v1/user")]
// 给函数加上async关键字
pub async fn user_info(){
    // 调用async函数后加.await,拿到执行后的Result结果
    match get_user_info(16).await {
        Ok(user_info) => {
            // 格式化宏用占位符传参,不要用+拼接
            info!("get user info success: {:?}", user_info);
        },
        Err(e) => {
            info!("error: {}", e);
        },
    }
}
额外说明

如果不需要返回用户数据,只是要打印日志,也可以不改get_user_info的返回值,只修改接口handler的async声明和加.await即可。你原代码里用到的string_to_static_str如果没有特殊需求建议删掉,强行转静态字符串容易引发内存泄漏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 17:06:07