Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Streams

Streams are the asynchronous version of Generators.

They have almost identical next and resume functions, but each must be used with .await, and we are now allowed to use asynchronous functions inside of the generator.

async fn send_requests(list) {
    let client = http::Client::new();

    let do_request = async |url| {
        Ok(client.get(url).send().await?.status())
    };

    for url in list {
        yield do_request(url).await;
    }
}

let requests = send_requests(["https://google.com", "https://amazon.com"]);

while let Some(status) = requests.next().await.transpose()? {
    println!("{}", status);
}
$> cargo run -- run scripts/book/streams/basic_stream.rn
200 OK
200 OK