如何在非异步功能上等待Rust Future

时间:2020-05-08 22:14:26

标签: rust async-await rust-tokio rust-actix

这里是生锈的新手(学习不到7天),这是所有权规则为异步/等待后我要克服的第二个障碍。

我正在编写一个调用async函数的测试,我需要从Future获得结果而不使用关键字await

我看过async_test,但是我不能使用它,因为(据我了解)这需要tokio运行时和#[tokio_main]方法中的main属性-但我的main已经用#[actix_rt::main]

装饰

这是我的考验

#[test]
pub fn test_get_item() -> Result<(), anyhow::Error> {
    let c = SomeClient::new();
    let result = c.get_item(123456).await?; // <- this is not allowed

    assert_eq!("Hello", result.title);
    assert_eq!("https://example.com", result.url.as_str());

    Ok(())
}

我尝试过并失败的事情(主要是由于我对Rust缺乏了解)

我不明白为什么它必须这么复杂,也许wait()某个地方有一个简单的函数(例如get_result()Future)?

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

不得不抬起头来重新开始,只是发现actix-web有一个我可以使用的宏,该宏允许进行async测试。

#[actix_rt::test]

在这一点上,宏对我来说都是神奇的,我希望我能尽快理解它们。