The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Promises::Deferred - An implementation of Promises in Perl

VERSION

version 0.01

SYNOPSIS

  use Promises::Deferred;

  sub fetch_it {
      my ($uri) = @_;
      my $d = Promises::Deferred->new;
      http_get $uri => sub {
          my ($body, $headers) = @_;
          $headers->{Status} == 200
              ? $d->resolve( decode_json( $body ) )
              : $d->reject( $body )
      };
      $d->promise;
  }

DESCRIPTION

This class is meant only to be used by an implementor, meaning users of your functions/classes/modules should always interact with the associated promise object, but you (as the implementor) should use this class. Think of this as the engine that drives the promises and the promises as the steering wheels that control the direction taken.

METHODS

new

This will construct an instance, it takes no arguments.

promise

This will return a Promises::Promise that can be used as a handle for this object.

status

This will return the status of the the asynchronous operation, which will be either 'in progress', 'resolved' or 'rejected'. These three strings are also constants in this package (IN_PROGRESS, RESOLVED and REJECTED respectively), which can be used to check these values.

result

This will return the result that has been passed to either the resolve or reject methods. It will always return an ARRAY reference since both resolve and reject take a variable number of arguments.

then( $callback, $error )

This method is used to register two callbacks, the first $callback will be called on success and it will be passed all the values that were sent to the corresponding call to resolve. The second, $error will be called on error, and will be passed the all the values that were sent to the corresponding reject. It should be noted that this method will always return the associated Promises::Promise instance so that you can chain things if you like.

resolve( @args )

This is the method to call upon the successful completion of your asynchronous operation, meaning typically you would call this within the callback that you gave to the asynchronous function/method. It takes an arbitrary list of arguments and captures them as the result of this promise (so obviously they can be retrieved with the result method).

reject( @args )

This is the method to call when an error occurs during your asynchronous operation, meaning typically you would call this within the callback that you gave to the asynchronous function/method. It takes an arbitrary list of arguments and captures them as the result of this promise (so obviously they can be retrieved with the result method).

AUTHOR

Stevan Little <stevan.little@iinteractive.com>

COPYRIGHT AND LICENSE

This software is copyright (c) 2012 by Infinity Interactive, Inc..

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.