rust - 在 Rust 中迭代 Stream
问题描述
我正在尝试使用板条箱从 docker 容器中迭代日志bollard
。
这是我的代码:
use std::default::Default;
use bollard::container::LogsOptions;
use bollard::Docker;
fn main() {
let docker = Docker::connect_with_http_defaults().unwrap();
let options = Some(LogsOptions::<String>{
stdout: true,
..Default::default()
});
let data = docker.logs("2f6c52410d", options);
// ...
}
docker.logs()
返回impl Stream<Item = Result<LogOutput, Error>>
。我想迭代结果,但我不知道该怎么做。我设法找到了一个使用板条箱的示例try_collect::<Vec<LogOutput>>()
,future_utils
但我想在 while 循环中迭代结果,而不是在向量中收集结果。我知道我可以迭代一个向量,但是在循环中执行任务对我的用例来说会更好。
我试图poll_next()
为流调用方法,但它需要一个Context
我不明白的神秘对象。poll_next()
在我pin_mut!()
在流上使用宏之前,该方法不可用。
如何迭代流?我应该阅读什么来了解这里发生了什么?我知道流与 相关Futures
,但在这里调用await
ornext()
不起作用。
解决方案
您通常会引入您选择的库的 StreamExt 特征,然后执行类似的操作
while let Some(foo) = stream.next().await {
// ...
}
推荐阅读
- xml - 将存储在 blob 中的 XML 文件中的数据导入 Azure SQL Server
- ruby-on-rails - 如何在 Rails 6 中使用茧宝石
- html - IE11 中奇怪的边界半径问题
- aspnetboilerplate - 如何创建像 aspnetboilerplate 这样的文档站点?
- sql - 如何使用 UWP 连接到数据库?
- django - 为什么我在嵌套 if 的模型中的方法中得到一个 none 值?
- r - 将文本框或表格添加到 R highchart
- javascript - Javascript 查找对象是否具有至少一个未定义的属性
- android - 应用程序关闭后如何保持套接字连接打开?
- android - 如何在 Android API 21 上使用 NMEA 协议?