无法调用返回 Result: 找到不透明类型 impl std::future::Future的函数



我无法从Result返回函数的结果。每个教程只演示如何使用 Result,而不演示如何从中返回值。

fn main(){
let mut a: Vec<String> = Vec::new();
a = gottem();
println!("{}", a.len().to_string());
//a.push(x.to_string()
}
async fn gottem() -> Result<Vec<String>, reqwest::Error> {
let mut a: Vec<String> = Vec::new();
let res = reqwest::get("https://www.rust-lang.org/en-US/")
.await?
.text()
.await?;
Document::from(res.as_str())
.find(Name("a"))
.filter_map(|n| n.attr("href"))
.for_each(|x| println!("{}", x));
Ok(a)
}

我收到以下错误:

error[E0308]: mismatched types
--> src/main.rs:13:9
|
13 |     a = gottem();
|         ^^^^^^^^ expected struct `std::vec::Vec`, found opaque type
...
18 | async fn gottem() -> Result<Vec<String>, reqwest::Error> {
| ----------------------------------- the `Output` of this `async fn`'s found opaque type
|
= note:   expected struct `std::vec::Vec<std::string::String>`
found opaque type `impl std::future::Future`
  1. 你的函数不返回Result,它返回一个Future<Result>(因为它是一个异步函数(,你需要把它输入到执行器中(例如block_on( 为了运行它;或者,使用reqwest::blocking因为如果您不关心异步位,它会更容易
  2. 一旦执行,您的函数将返回一个Result但您正在尝试将其放入Vec中,这不起作用

不相关,但:

println!("{}", a.len().to_string());

{}本质上在内部执行to_string,则to_string调用没有用。

相关内容

  • 没有找到相关文章