嵌套的未来链不要求Rusoto RusotoFuture的内部未来

时间:2019-06-20 05:00:14

标签: rust rust-tokio rusoto

我正在尝试使用rusoto通过ListObjects的板条箱上的S3调用来获取文件列表,但是当我将其链接到下一组期货时,期货似乎没有被要求,我已经尝试过很多配置相同的链而没有运气

最后,GetObject返回一个RusotoFuture<GetObjectOutput,_>,我正尝试通过期货消费它,因此所有这些行为都可以一起使用,但是内部的未来没有被调用,我的怀疑是我包装了据我了解,String中的最后一个futures::future::ok无法正常工作

我正在尝试以下

let task = s3_client1
    .list_objects(ListObjectsRequest {
        bucket: ds.bucket.clone(),
        prefix: Some("meta/datastores".to_owned()),
        ..Default::default()
    })
    .map(|list_objects| list_objects.contents.unwrap())
    .map_err(|_| ())
    .and_then(|objects| {
        //                println!("objects {:?}", objects);
        stream::iter_ok(objects)
            .map(|file_object| file_object.clone().key.unwrap())
            .and_then(move |file_key| {
                println!("filerino {:?}", &file_key);

                s3_client2
                    .get_object(GetObjectRequest {
                        bucket: ds.bucket.clone(),
                        key: file_key,
                        ..Default::default()
                    })
                    .map_err(|e| {
                        println!("Some error!!!! {:?}", e);
                        ()
                    })
                    .map(|object_output| object_output.body.unwrap())
                    .map(|body| body.concat2())
                    .map(|all_object| {
                        all_object.map_err(|e| ()).and_then(|bytes| {
                            let result = String::from_utf8(bytes).unwrap();
                            println!("body: {:?}", &result);
                            futures::future::ok::<String, ()>(result)
                        })
                    })
            })
            .collect()
    })
    .map_err(|e| {
        println!("eeeerroor  {:?}", e);
        ()
    })
    .map(|_x| {
        //                println!("done! {:?}", x);
        println!("done!");
    });

tokio::spawn(task);

0 个答案:

没有答案