如何转换未来的输出?
How to convert a future's output?
对于 Tokio 的 futures,如果你想在组合器的因果链中转换 Error
,你可以使用 from_err::<NewType>()
。我想要相同的功能,但不是 impl Future<Item = (), Error = ()>
.
中的 Item
我的一些代码示例:
let mut async_series_client = vec![];
async_series_client.push(Box::new(
SocketHandler::connect(
port,
addr,
handle,
tx_wave,
tx_linear,
KcpSessionManager::new(&handle2).unwrap(),
)
.from_err::<HyxeError>()
.join(tube)
.map_err(|mut err| err.printf()),
));
This returns ((),())
(附带问题:它是否 return 是 () 的元组,因为连接?)。我希望它 return 只是 ()
。我该怎么做?
使用Future::map
。这与 Option::map
、Result::map
和 Iterator::map
:
平行
use futures::{future, Future}; // 0.1.27
fn some_future() -> impl Future<Item = i32, Error = ()> {
future::ok(42)
}
fn change_item() -> impl Future<Item = String, Error = ()> {
some_future().map(|i| i.to_string())
}
另见 Stream::map
。
当 async
/await
语法稳定后,您 可能 永远不需要再次使用此组合器,因为您可以使用常规方法:
async fn some_future() -> i32 {
42
}
async fn change_output() -> String {
some_future().await.to_string()
}
或Result::map
:
async fn some_future() -> Result<i32, ()> {
Ok(42)
}
async fn change_output() -> Result<String, ()> {
some_future().await.map(|i| i.to_string())
}
但它仍然存在:
use futures::{Future, FutureExt}; // 0.3.0-alpha.16
async fn some_future() -> i32 {
42
}
fn change_output() -> impl Future<Output = String> {
some_future().map(|i| i.to_string())
}
对于 Tokio 的 futures,如果你想在组合器的因果链中转换 Error
,你可以使用 from_err::<NewType>()
。我想要相同的功能,但不是 impl Future<Item = (), Error = ()>
.
Item
我的一些代码示例:
let mut async_series_client = vec![];
async_series_client.push(Box::new(
SocketHandler::connect(
port,
addr,
handle,
tx_wave,
tx_linear,
KcpSessionManager::new(&handle2).unwrap(),
)
.from_err::<HyxeError>()
.join(tube)
.map_err(|mut err| err.printf()),
));
This returns ((),())
(附带问题:它是否 return 是 () 的元组,因为连接?)。我希望它 return 只是 ()
。我该怎么做?
使用Future::map
。这与 Option::map
、Result::map
和 Iterator::map
:
use futures::{future, Future}; // 0.1.27
fn some_future() -> impl Future<Item = i32, Error = ()> {
future::ok(42)
}
fn change_item() -> impl Future<Item = String, Error = ()> {
some_future().map(|i| i.to_string())
}
另见 Stream::map
。
当 async
/await
语法稳定后,您 可能 永远不需要再次使用此组合器,因为您可以使用常规方法:
async fn some_future() -> i32 {
42
}
async fn change_output() -> String {
some_future().await.to_string()
}
或Result::map
:
async fn some_future() -> Result<i32, ()> {
Ok(42)
}
async fn change_output() -> Result<String, ()> {
some_future().await.map(|i| i.to_string())
}
但它仍然存在:
use futures::{Future, FutureExt}; // 0.3.0-alpha.16
async fn some_future() -> i32 {
42
}
fn change_output() -> impl Future<Output = String> {
some_future().map(|i| i.to_string())
}