rust - 解析为未来的元组
问题描述
在 rust 中,我试图通过.get
使用超级客户端作为元组从请求中提取两位数据来实现未来。问题是生成的类型不起作用。
所以给出一些这样的代码:
let result = client
.get(url)
.map_err(|err| Error::from(err))
.and_then(|response| {
(response
.into_body()
.concat2()
.map(|body| String::from_utf8(body.to_vec()).unwrap())
.map_err(|err| Error::from(err)),
response
.headers()
.get(CONTENT_TYPE)
.map(|content_type| content_type.to_str()))
});
我收到一个错误,例如the trait "futures::IntoFuture" is not implemented for
...
我很确定这是因为元组的两个成员是期货并且可以处理,但元组不是,但我不确定如何解析期货的值并将它们放入元组中。
解决方案
元组的第一个元素是未来,但第二个元素是Option
. 虽然IntoFuture
只要所有元素都实现它并且错误类型匹配,就为元组实现它,但您只有一个未来要解决,因此有一个更简单的解决方案。
另一个问题是response.into_body()
消耗response
,因此您以后无法访问它来检索标头。由于我们只有一个 future 需要解决,最简单的解决方案是先从响应中提取内容类型,然后将其附加到map()
方法中的结果中:
let result = client
.get("https://www.stackoverflow.com/".parse().unwrap())
.map_err(|err| Error::from(err))
.and_then(|response| {
let content_type = response
.headers()
.get(CONTENT_TYPE)
.map(|content_type| content_type.to_str().unwrap().to_string());
response
.into_body()
.concat2()
.map(|body| (
String::from_utf8(body.to_vec()).unwrap(),
content_type,
))
.map_err(|err| Error::from(err))
});
如果您仍然无法使代码正常工作,我建议发布一个问题,其中包括您尝试编译的实际代码的最小示例以及您收到的实际错误消息。使用未来组合器的代码的错误消息可能会变得冗长且令人困惑,但它们仍然是了解代码无法编译的最重要信息。
推荐阅读
- c# - 为字典生成招摇
- python - PyQT:如何在主线程上调用函数并获取结果(不预先存储结果)?
- firebase - 使用 image_picker 访问图像然后将其发送到 Firebase 存储时出现 BackgroundSession 和守护程序错误
- python - 根据列中的值匹配两个 Pandas DataFrame
- javascript - 提示中的 Javascript“不等于”功能
- python-3.x - 如何计算csv文件列内的平均值?
- c++ - 当数组大小过大(例如,大小> = 800)时,C++ 代码不显示输出,但在在线编译器中工作正常
- docker - 使用 GCR 的 gcloud cred helper 的瞭望塔
- android - 无法将模块导入android studio
- node.js - 如何将 React Native 组件与 Node js 服务器连接起来?(React Native、NodeJS(没有 Express)、MongoDB)