As mentioned in the comment, the easiest would be to always return a Promise, and wrap non-async actions with a completed Promise. To wrap a value in a completed promise, simply use the static pure
method:
public static Promise<Result> doSomethingAsync() {
if (...) {
return getData();
} else {
return F.Promise.pure(ok(...));
}
}