Fil*_*rrù 9 rust async-await rust-futures
我想运行类似以下代码的代码:
async fn get_user(s: &str) -> Option<User> { /* ... */ }
let user_id = Some("sessiontoken").and_then(|session_token| {
get_user(session_token)
.await // <- error
.map(|user| user.id)
});
Run Code Online (Sandbox Code Playgroud)
但它不起作用,因为await只能在异步块或函数内部使用。另一方面,如果我使用异步块,则闭包将返回,impl Future<Output = Option<_>>这是不允许的,因为Option::and_then只允许Option作为返回类型。
我知道的唯一选择是使用OptionFuture,创建一个中间变量,而.map不是.and_then。
use futures::future::OptionFuture;
let user: OptionFuture<_> = Some("sessiontoken")
.map(|session_token| {
get_user(session_token)
})
.into();
let user_id = user.await.flatten().map(|user| user.id);
Run Code Online (Sandbox Code Playgroud)
但这确实很麻烦,并且阻止我使用许多对选项、结果或类似操作进行操作的函数,例如Option::and_then.
难道就没有更好的办法了吗?
我相信惯用的方法是简单地使用match:
let user_id = match session_token {
Some(session_token) => get_user("sessiontoken").await.map(|user| user.id),
None => None,
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6033 次 |
| 最近记录: |