首页 > 解决方案 > 在 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,但在这里调用awaitornext()不起作用。

标签: rust

解决方案


您通常会引入您选择的库的 StreamExt 特征,然后执行类似的操作

while let Some(foo) = stream.next().await {
    // ...
}

推荐阅读