Promises are simple abstractions that don't impose strict requirements on you; you can use them to calculate the result on some other thread, light process, or anything you like.
In Java, there are a couple of ways to achieve this; one of them is with futures (
jdeferred (https://github.com/jdeferred/jdeferred), which you might have used before.
In essence a promise is just a promise that you can give to your caller, the caller can use it at any given time. There are two possibilities: