promise() is another coroutine builder. It works a lot like async(), in that it executes a coroutine and lets you get the result from the lambda expression.

The fundamental difference is that promise() returns a Promise, which is a Kotlin wrapper around the JavaScript Promise object. This is useful for interoperability with JavaScript libraries that take a Promise.

To get the result from a Promise, you can call then() and pass a lambda expression that will be passed the result returned from a coroutine. This is a bit like calling await() on a Deferred object. However, await() is a suspend function, since it is part of the coroutines system. then() on Promise is part of JavaScript, and so you do not need to call then() inside of a coroutine.

Note that promise() only works on Kotlin/JS, not other Kotlin environments.

You can learn more about this in:
Run Edit