我正在rust中学习并发,找不到一个简单的例子来返回和解析一个Future
。
我如何在rust中实现这段javascript代码呢?看起来我必须在某个struct上实现Future
trait并返回它(对吗?),但是我想要一个简单的例子。除了setTimeout
,它可以是任何东西,只要保持简单就行了。
function someAsyncTask() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve("result")
}, 1_000)
})
}
2条答案
按热度按时间omhiaaxx1#
可以创建的最直接的
fn() -> impl Future
是使用async
函数:如果您“删除”一层语法糖,则会变成下面的
fn
,返回一个async
块。gwo2fgha2#
在Rust futures中,与JavaScript的
Promise
构造函数最类似的是 oneshot channel,如futures
和tokio
中所示,通道的“发送方”类似于resolve
函数,通道的“接收方”是Future
,其工作方式类似于Promise
,没有单独的reject
操作;如果希望传递错误,可以通过在通道中传递Result
来实现。翻译您的代码:
请注意,就像你只需要在JS中使用
new Promise
,如果你要把回调之类的东西翻译到承诺世界中,你只需要在Rust中使用new Promise
,如果你需要从外部事件完成一个未来,这两种情况都应该是相当罕见的。