对象化
如果熟悉 Javascript 中的 promises
,并且跟着我们之前的博客完成了学习,你也许会对此感到困惑:在之前的博客中,那些熟悉的组合器(then
,catch
和 finally
)去了哪里。
你将在这篇博客中找到它们的替代品,并且在本博客最后,下面的代码将会通过编译。同时你也会理解那些使得 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));
}