Можно ли Callback превратить в suspend функцию в Coroutines

«Можно ли Callback превратить в suspend функцию в Coroutines» — вопрос из категории Coroutines и Flow, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, можно с помощью suspendCoroutine или suspendCancellableCoroutine. Они позволяют преобразовать callback-стиль в последовательный suspend-код.

Пример:

suspend fun fetchData(): String = suspendCoroutine { continuation ->
    someApi.fetchData(object : Callback {
        override fun onSuccess(result: String) {
            continuation.resume(result)
        }
        override fun onError(error: Throwable) {
            continuation.resumeWithException(error)
        }
    })
}

Важно:

  • Используйте suspendCancellableCoroutine, если операция отменяемая.
  • Не забывайте обрабатывать ошибки через resumeWithException.
  • Избегайте утечек: не сохраняйте continuation вне колбэка.