add promises example

This commit is contained in:
2019-07-02 04:11:48 +07:00
parent 84ebbe9928
commit 317cfe3bb9
2 changed files with 84 additions and 2 deletions

View File

@@ -57,6 +57,26 @@ namespace
throw std::exception();
}
};
netex::promise<net::content_t> download(std::string url) {
return netex::make_promise<net::content_t>([
url = std::move(url)
](auto resolve, auto reject){
net::request_builder(std::move(url))
.callback([resolve,reject](net::request request) mutable {
if ( !request.is_done() ) {
reject(net::exception("network error"));
return;
}
net::response response = request.get();
if ( response.is_http_error() ) {
reject(net::exception("server error"));
return;
}
resolve(std::move(response.content));
}).send();
});
}
}
TEST_CASE("curly") {
@@ -706,7 +726,7 @@ TEST_CASE("curly_examples") {
// Error message: Couldn't resolve host name
}
SECTION("Request Callback") {
SECTION("Request Callbacks") {
auto request = net::request_builder("http://www.httpbin.org/get")
.callback([](net::request request){
if ( request.is_done() ) {
@@ -771,4 +791,20 @@ TEST_CASE("curly_examples") {
.send().get();
}
}
SECTION("Promised Requests") {
auto promise = download("https://httpbin.org/image/png")
.then([](const net::content_t& content){
std::cout << content.size() << " bytes downloaded" << std::endl;
}).except([](std::exception_ptr e){
try {
std::rethrow_exception(e);
} catch (const std::exception& ee) {
std::cerr << "Failed to download: " << ee.what() << std::endl;
}
});
promise.wait();
// 8090 bytes downloaded
}
}