【发布时间】:2020-10-13 11:29:55
【问题描述】:
我尝试遵循以下 reqwest 示例:
let client = reqwest::Client::new();
let res = client.post("http://httpbin.org/post")
.body("the exact body that is sent")
.send()?;
示例编译失败:
error[E0277]: the `?` operator can only be applied to values that implement `std::ops::Try`
--> src/main.rs:26:15
|
26 | let res = client.post("http://httpbin.org/post")
| _______________^
27 | | .body("the exact body that is sent")
28 | | .send()?;
| |____________^ the `?` operator cannot be applied to type `impl std::future::Future`
|
= help: the trait `std::ops::Try` is not implemented for `impl std::future::Future`
= note: required by `std::ops::Try::into_result`
error[E0277]: the `?` operator can only be used in a function that returns `Result` or `Option` (or another type that implements `std::ops::Try`)
--> src/main.rs:26:15
|
11 | / fn main(){
12 | | // gets the api key from env var
13 | | let mut key: String = env::var("key").unwrap();
14 | | // get the mok key bassically useless but its still useful to prevent tampering
... |
26 | | let res = client.post("http://httpbin.org/post")
| |_______________^
27 | || .body("the exact body that is sent")
28 | || .send()?;
| ||____________^ cannot use the `?` operator in a function that returns `()`
... |
49 | | //}
50 | | }
| |_- this function should return `Result` or `Option` to accept `?`
|
= help: the trait `std::ops::Try` is not implemented for `()`
= note: required by `std::ops::Try::from_error`
我应该如何解决这个问题?这是过时了吗? 我正在使用 Rust 版本 1.47.0
【问题讨论】:
-
如果你只是想编译它,你可以将编译器抱怨的
?替换为.unwrap()。 -
不,这个例子并没有过时。它只要求将代码放在返回
Result的函数中,这是示例代码的常见要求。 -
添加展开会引发此错误
no method named 'unwrap' found for opaque type 'impl std::future::Future' in the current scope -
此代码可能确实与您使用的
reqwest版本不同。请转到https://docs.rs/reqwest上与您正在使用的版本相同的文档版本。 -
使用
reqwest::blocking::Client代替reqwest::Client可能会成功。