如何解决为什么我的值之一没有进入我的异步块?
use reqwest::Client;
struct Source {
url: String,version: RefCell<String>,}
let client = Client::new();
let client_ref = &client;
let request = |url| async move {
client_ref
.get(url)
.send()
.await
.expect("Couldn't send request")
.error_for_status()
.expect("http error")
};
let mut site_update = false;
macro_rules! api_page {
( $source:expr ) => {{
let response = request($source.url.as_str()).await;
let ver = response
.headers()
.get("Last-Modified")
.unwrap()
.to_str()
.unwrap();
let mut old = $source.version.borrow_mut();
if ver != old.as_str() {
site_update = true;
}
|| async move {
*old = ver.into();
}
}};
}
let result = api_page!(Source {
url: "http://example.org"
version: "".into()
});
不幸的是,我收到错误说 response does not live long enough
和 ver does not live long enough
,因为它们在宏块的末尾被丢弃。
此问题仅在我尝试在闭包内使用 ver
时发生,但使用 response
和 old
可按预期工作。我唯一的猜测是 ver
没有正确移入异步块,但我不确定为什么。
如果这与我在响应时调用的方法有关,the response object I'm using can be found here。谢谢。
解决方法
ver
正在引用 response
,它在移动后仍然引用旧值
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。