Module Protocols.HTTP.Promise

Description

This HTTP client module utilises the Concurrent.Promise and Concurrent.Future classes and only does asynchronous calls.

Example
Protocols.HTTP.Promise.Arguments a1, a2;

a1 = Protocols.HTTP.Promise.Arguments(([
  "extra_args" : ({ "Extra arg for Roxen request" }),
  "headers"    : ([ "User-Agent" : "My Special HTTP Client" ])
]));

a2 = Protocols.HTTP.Promise.Arguments(([
  "variables" : ([ "q" : "Pike programming language" ]),
  "maxtime"   : 10
]));

Concurrent.Future q1 = Protocols.HTTP.Promise.get_url("http://www.roxen.com", a1);
Concurrent.Future q2 = Protocols.HTTP.Promise.get_url("http://www.google.com", a2);

array(Concurrent.Future) all = ({ q1, q2 });

/*
  To get a callback for each of the requests
*/

all->on_success(lambda (Protocols.HTTP.Promise.Result ok_resp) {
  werror("Got successful response for %O\n", ok_resp->host);
});
all->on_failure(lambda (Protocols.HTTP.Promise.Result failed_resp) {
  werror("Request for %O failed!\n", failed_resp->host);
});

/*
  To get a callback when all of the requests are done. In this case
  on_failure will be called if any of the request fails.
*/

Concurrent.Future all2 = Concurrent.results(all);

all2->on_success(lambda (array(Protocols.HTTP.Promise.Result) ok_resp) {
  werror("All request were successful: %O\n", ok_resp);
});
all->on_failure(lambda (Protocols.HTTP.Promise.Result failed_resp) {
  werror("The request to %O failed.\n", failed_resp->host);
});