理解 rust 中的 futures(八)

对象化

如果熟悉 Javascript 中的 promises ,并且跟着我们之前的博客完成了学习,你也许会对此感到困惑:在之前的博客中,那些熟悉的组合器(thencatchfinally)去了哪里。

你将在这篇博客中找到它们的替代品,并且在本博客最后,下面的代码将会通过编译。同时你也会理解那些使得 futures 可以正常工作的 type、trait 以及底层的概念。

// This does not compile, yet

fn main() {
    let my_future = future::ready(1)
        .map(|x| x + 3)
        .map(Ok)
        .map_err(|e: ()| format!("Error: {:?}", e))
        .and_then(|x| future::ready(Ok(x - 3)))
        .then(|res| {
            future::ready(match res {
                Ok(val) => Ok(val + 3),
                err => err,
            })
        });

    let val = block_on(my_future);
    assert_eq!(val, Ok(4));
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容