rust 返回 impl Future 的三种写法。

不羁岁月 提交于 2020-08-17 04:14:50
use futures::{future, Future};
use futures::future::{FutureExt, Ready};
use std::result::Result;
use std::error::Error;

// 返回 impl Future 的三种写法
async fn f() -> Result<usize, Box<dyn Error>> {
    if false {
        let a: Ready<Result<usize, Box<dyn Error>>> = futures::future::ok(1);
        let b = a.map(|x| Ok(x.unwrap() + 1));
        b.await
    } else if true {
        async{1}.map(|x|Ok(x+1)).await
    } else {
        let a = async {1};
        let b = a.map(|x|Ok(x+1));
        b.await
        // then() 的使用:
        // b.then(|x:Result<usize, Box<dyn Error>>| async {Ok(x.unwrap()+1)}).await
    }
}

fn main() {
    let a = f();
    let c = futures::executor::block_on(a);
    println!("{}", c.unwrap());

}

自动推导的类型如截图:

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!