IOU is a Promises/A+ compliant promise library. It is written in Java, so it can be plugged in to any regular Java, Groovy, Kotlin or Android-project.
- Call with single then
- Call with single then and Java 8 lambda
- Chained or piped promise
- Sequential promise
- Rejecting a promise
- Failing a promise
Implementations
Dependency management
Maven
Regular
<dependency>
<groupId>nl.brusque.iou</groupId>
<artifactId>iou-java</artifactId>
<version>1.0.0-beta-01</version>
</dependency>
Android
<dependency>
<groupId>nl.brusque.iou</groupId>
<artifactId>iou-android</artifactId>
<version>1.0.0-beta-02</version>
</dependency>
Gradle
Regular
compile 'nl.brusque.iou:iou-java:1.0.0-beta-01'
Android
compile 'nl.brusque.iou:iou-android:1.0.0-beta-02'
Examples
Given the example implementation
class TestTypedIOU<TInput> extends AbstractIOU<TInput> {
...
}
class TestTypedPromise<TInput> extends AbstractPromise<TInput> {
...
}
TestTypedIOU<Integer> iou = new TestTypedIOU<>();
Call with single then
iou.getPromise()
.then(new IThenCallable<Integer, Void>() {
@Override
public Void apply(Integer integer) throws Exception {
System.out.println(integer);
return null;
}
});
iou.resolve(42); // prints 42
Call with single then and Java 8 lambda
iou.getPromise()
.then((Integer integer) -> {
System.out.println(integer);
return null;
});
iou.resolve(42); // prints 42
Chained or piped promise
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"
Sequential promise
TestTypedPromise<Integer> promise = iou.getPromise();
promise
.then(new IThenCallable<Integer, Void>() {
@Override
public Void apply(Integer input) throws Exception {
System.out.println(input);
return null;
}
});
promise
.then(new IThenCallable<Integer, String>() {
@Override
public Void apply(Integer input) throws Exception {
String result = String.format("%d * 10 = %d", input, input * 10);
System.out.println(result);
return result;
}
});
iou.resolve(42); // prints "42" and "42 * 10 = 420" in exactly this order
Rejecting a promise
iou.getPromise()
.then(new IThenCallable<Integer, Integer>() {
@Override
public Integer apply(Integer integer) throws Exception {
return integer * 42;
}
}, new IThenCallable<Object, Void>() {
@Override
public Void apply(Object reason) throws Exception {
System.out.println(String.format("%s I can't do that.", reason));
return null;
}
});
iou.reject("I'm sorry, Dave."); // prints "I'm sorry, Dave. I can't do that."
Failing a promise
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 it is you do here?");
return null;
}
} ,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."