Tengo una función que necesita llamar a otra función para que funcione. Quiero retrasar la segunda llamada de función hasta que sea necesario. La razón es que a veces no se necesita la segunda llamada de función.
El código se ve así:
suspend fun doWork(list: List<A>) { if(list.isEmpty()) return secondFunction() } Sin embargo, secondFunction() tiene que ser determinado por la persona que llama a la función. ¿Hay alguna manera de hacer esto tal vez usando lambda?
Podría intentar usar una lambda para retrasar la ejecución de su segunda función hasta que necesite el valor.
suspend fun doWork( list: List<A>, lambdaFunction: suspend () -> Unit ) { ... lambdaFunction() }O puede hacer que devuelva un valor.
suspend fun doWork( list: List<A>, lambdaFunction: suspend () -> String ) { ... val result = lambdaFunction() }Lo llamarías así:
doWork( list = list, lambdaFunction = { secondFunction() } ) También lo hice suspend porque te vi usando suspend . No tienes que usar suspend .
Lo que parece que quieres se puede resolver a través del Observer Pattern
Te mostraré en rxKotlin
val subject = PublishSubject.create<Observable<List<A>>>() subject.subscribeBy( onNext = { doWork(it) }, onError = { it.printStackTrace() }, onComplete = { println("Done!") } )Y cuando la lista esté lista.
subject.oNext(list) Se llamará a la función doWork y no necesita bloquear el uso de secondFunction ya que la lista contendrá los valores.