Moreover, Kotlin's concept of suspending function provides a safer and less error-prone abstraction for asynchronous operations than futures and promises.
Could someone explain why this is true?
Because suspend functions are sequential by nature, so it easier to write sequential asyncronous code , there is no way to forget start it as with future/promise, you invoke suspend function and suspend until value is returned, no need to support cancellation or lifecycle explicitly, suspend function always support it