IOU for Java - Promises/A+ implementation for Java
Java
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
src
.gitignore
.gitlab-ci.yml
.travis.yml
CONTRIBUTING.md
LICENSE
README.md
iou-java.iml
pom.xml

README.md

IOU Java

Travis CI License MIT

Promises/A+ logo IOU Java is a [Promises/A+](https://github.com/promises-aplus/promises-spec) compliant promise library that extends [IOU Core](https://github.com/ioweyou/iou-core).

Maven


<dependency>
    <groupId>nl.brusque.iou</groupId>
    <artifactId>iou-java</artifactId>
    <version>1.0.0-beta-01</version>
</dependency>

Gradle


compile 'nl.brusque.iou:iou-java:1.0.0-beta-01' { transitive = true }

Example


Call with single then

IOU<Integer> iou = new IOU<>();

iou.getPromise()
        .then(new IThenCallable<Integer, Void>() {
            @Override
            public Void apply(Integer input) throws Exception {
                System.out.println(input.toString());

                return null;
            }
        });

iou.resolve(42); // prints "42"

Chained or piped promise

IOU<Integer> iou = new IOU<>();

iou.getPromise()
        .then(new IThenCallable<Integer, Integer>() {
            @Override
            public Integer apply(Integer input) throws Exception {
                return input * 10;
            }
        })
        .then(new IThenCallable<Integer, String>() {
            @Override
            public String apply(Integer input) throws Exception {
                return String.format("The result: %d", input);
            }
        })
        .then(new IThenCallable<String, Void>() {
            @Override
            public Void apply(String input) throws Exception {
                System.out.println(input);

                return null;
            }
        });

iou.resolve(42); // prints "The result: 420"

Rejecting a promise

IOU<Integer> iou = new IOU<>();

iou.getPromise()
        .then(new IThenCallable<Integer, Integer>() {
            @Override
            public Integer apply(Integer integer) throws Exception {
                return integer * 42;
            }
        })
        .fail(new IThenCallable<Object, Void>() {
            @Override
            public Void apply(Object input) throws Exception {
                System.out.println(String.format("%s I can't do that.", input));

                return null;
            }
        });

iou.reject("I'm sorry, Dave."); // prints "I'm sorry, Dave. I can't do that."

Or if you like the A+ way better

IOU<Integer> iou = new IOU<>();

iou.getPromise()
        .then(new IThenCallable<Integer, Integer>() {
            @Override
            public Integer apply(Integer input) throws Exception {
                return input * 42;
            }
        }, new IThenCallable<Object, Integer>() {
            @Override
            public Integer apply(Object input) throws Exception {
                System.out.println(String.format("%s I can't do that.", input));

                return null;
            }
        });

iou.reject("I'm sorry, A+."); // prints "I'm sorry, A+. I can't do that."

Failing a promise

IOU<Integer> iou = new IOU<>();

iou.getPromise()
        .then(new IThenCallable<Integer, Integer>() {
            @Override
            public Integer apply(Integer input) throws Exception {
                throw new Exception("I just don't care.");
            }
        })
        .then(new IThenCallable<Integer, Void>() {
            @Override
            public Void apply(Integer input) throws Exception {
                System.out.println("What would you say you do here?");

                return null;
            }
        })
        .fail(new IThenCallable<Object, Void>() {
            @Override
            public Void apply(Object reason) throws Exception {
                System.out.println(
                    String.format("It's not that I'm lazy, it's that %s",
                            ((Exception)reason).getMessage()));

                return null;
            }
        });

iou.resolve(42); // prints "It's not that I'm lazy, it's that I just don't care."