Rust 返回异步移动块中的任何内容

Rust 返回异步移动块中的任何内容,rust,closures,Rust,Closures,所以我实现了这个代码示例,并对它做了一些修改。现在看起来是这样的: pub async fn loadAllSNPData(&mut self, client: &Client) { let bodies = stream::iter(&self.snps) .map(|snp| { let url = format!("https://ncbi.gov/?db=snp&id={}",snp.identifier

所以我实现了这个代码示例,并对它做了一些修改。现在看起来是这样的:

pub async fn loadAllSNPData(&mut self, client: &Client) {


let bodies = stream::iter(&self.snps)
    .map(|snp|  {

        let url = format!("https://ncbi.gov/?db=snp&id={}",snp.identifier);

        let client = &client;

        async move {

            let resp = client.get(&url).send().await?;
            let rawJson = resp.text().await;



            // parse json
            let json: Value = serde_json::from_str(&rawJson).expect("JSON was not well-formatted");
            
            Ok((json,snp))
        }

    })
    .buffer_unordered(PARALLEL_REQUESTS);

bodies
    .for_each(|b| {
        async {

            match b {
                Ok(b) => println!("Got {} bytes", b),
                Err(e) => eprintln!("Got an error: {}", e),
            }
        }
    })
    .await;

}
在我想要返回与包含文本的
rawJson
-变量不同的东西之前,一切都很正常。我想将解析后的json和相应的snp元素返回给另一个函数,然后该函数过滤json对象中的一些信息,并将其存储在相应的snp对象中。但无论何时更改返回的对象,都会出现以下错误:

错误[E0277]:
运算符只能用于 返回
结果
选项

然后,它继续将整个
异步移动
-块标记为错误根源。我该怎么做才能归还不同的东西呢

编辑:我现在返回Ok((json,snp))并获取

错误[E0698]:必须知道此字段中的内部类型
async fn
body 上下文


如错误所述,仅当
异步
块的返回值是
结果
选项
时,才能使用
rawJson
的类型是一个
结果
,因此当您返回它时,它工作正常。但是,您现在试图返回一个元组,因此它抱怨您不能再使用
。解决这个问题的方法是返回
Ok((json,snp))

是有道理的,但我仍然有一些想法。如果我返回Ok((json,snp))我得到
错误[E0698]:异步fn正文中的类型在此上下文中必须是已知的
,并且
无法推断枚举结果上声明的类型参数E的类型
指向
Ok
Hmm,是否明确指定
snp
参数的类型实际上有帮助,我认为问题在于它无法推断返回结果中的错误类型。您可以通过返回
Ok((json,snp))作为reqwest::Result
来解决这个问题。这就差不多了<代码>Ok((json,snp))作为reqwest::Result是一个非常通用的解决方案,对我来说非常有效。
Ok((json,snp))
^^ cannot infer type for type parameter `E` declared on
the enum `Result`