相关疑难解决方法(0)

如何在稳定的Rust中同步返回在异步Future中计算的值?

我正在尝试使用hyper来获取HTML页面的内容,并希望同步返回将来的输出。我意识到我可以选择一个更好的示例,因为同步HTTP请求已经存在,但是我对了解我们是否可以从异步计算中返回一个值更感兴趣。

extern crate futures;
extern crate hyper;
extern crate hyper_tls;
extern crate tokio;

use futures::{future, Future, Stream};
use hyper::Client;
use hyper::Uri;
use hyper_tls::HttpsConnector;

use std::str;

fn scrap() -> Result<String, String> {
    let scraped_content = future::lazy(|| {
        let https = HttpsConnector::new(4).unwrap();
        let client = Client::builder().build::<_, hyper::Body>(https);

        client
            .get("https://hyper.rs".parse::<Uri>().unwrap())
            .and_then(|res| {
                res.into_body().concat2().and_then(|body| {
                    let s_body: String = str::from_utf8(&body).unwrap().to_string();
                    futures::future::ok(s_body)
                })
            }).map_err(|err| format!("Error scraping web page: {:?}", &err))
    });

    scraped_content.wait()
}

fn read() {
    let scraped_content = future::lazy(|| {
        let https = HttpsConnector::new(4).unwrap(); …
Run Code Online (Sandbox Code Playgroud)

future rust hyper

6
推荐指数
1
解决办法
2698
查看次数

如何创建一个流,其中项目基于流之前返回的项目?

我有一个函数可以生成一个 futures::Stream基于参数的函数。我想多次调用此函数并将流压平在一起。使问题复杂化的事实是,我想将流返回的值作为参数反馈给原始函数。

具体来说,我有一个函数可以将数字流返回为零:

fn numbers_down_to_zero(v: i32) -> impl Stream<Item = i32> {
    stream::iter((0..v).rev())
}
Run Code Online (Sandbox Code Playgroud)

我想从 5 开始调用这个函数。还应该为返回的每个奇数调用该函数。总调用集numbers_down_to_zero将是:

fn numbers_down_to_zero(v: i32) -> impl Stream<Item = i32> {
    stream::iter((0..v).rev())
}
Run Code Online (Sandbox Code Playgroud)

产生总流

numbers_down_to_zero(5);
numbers_down_to_zero(3);
numbers_down_to_zero(1);
numbers_down_to_zero(1);
Run Code Online (Sandbox Code Playgroud)

有哪些技术可以实现这一点?

asynchronous future stream rust

5
推荐指数
2
解决办法
1680
查看次数

标签 统计

future ×2

rust ×2

asynchronous ×1

hyper ×1

stream ×1