如何在非异步函数上等待 Rust Future
How to await a Rust Future on a non-async function
这里是 Rust 新手(学习不到 7 天),在所有权规则之后我要克服的第二个障碍是 async/await。
我正在编写一个调用 async
函数的测试,我需要在不使用关键字 await
.
的情况下从 Future
获取结果
我查看了 async_test
,但是我不能使用它,因为(据我所知)这需要 tokio
运行时和我的 main
中的 #[tokio_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 缺乏了解)
- 使用 futures-await-test crate 在 actix web 项目上使用
async_test
。
- 在 reddit 中阅读此 thread。
- 关注此 rust community thread
中的几个示例
- 试图
poll()
未来,但它并没有带我到任何地方。
我不明白为什么一定要这么复杂,也许 Future
的某个地方有一个简单的函数(比如 wait()
或 get_result()
)?
感谢您的帮助。
不得不稍微理清头绪并重新开始,只是发现 actix-web 有一个我可以使用的允许 async
测试的宏。
#[actix_rt::test]
此时此刻,宏对我来说都是神奇的,我希望我能尽快理解它们。
这里是 Rust 新手(学习不到 7 天),在所有权规则之后我要克服的第二个障碍是 async/await。
我正在编写一个调用 async
函数的测试,我需要在不使用关键字 await
.
Future
获取结果
我查看了 async_test
,但是我不能使用它,因为(据我所知)这需要 tokio
运行时和我的 main
中的 #[tokio_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 缺乏了解)
- 使用 futures-await-test crate 在 actix web 项目上使用
async_test
。 - 在 reddit 中阅读此 thread。
- 关注此 rust community thread 中的几个示例
- 试图
poll()
未来,但它并没有带我到任何地方。
我不明白为什么一定要这么复杂,也许 Future
的某个地方有一个简单的函数(比如 wait()
或 get_result()
)?
感谢您的帮助。
不得不稍微理清头绪并重新开始,只是发现 actix-web 有一个我可以使用的允许 async
测试的宏。
#[actix_rt::test]
此时此刻,宏对我来说都是神奇的,我希望我能尽快理解它们。