Ho avviato un progetto per scrivere un driver PostgreSQL asincrono su Scala e per essere asincrono, ho bisogno di accettare i callback e usa i futures, ma accettare un callback e un futuro rende il codice ingombrante perché devi sempre inviare una richiamata anche se è inutile.
Ecco un test:
"insert a row in the database" in {
withHandler {
(handler, future) =>
future.get(5, TimeUnit.SECONDS)
handler.sendQuery( this.create ){ query => }.get( 5, TimeUnit.SECONDS )
handler.sendQuery( this.insert ){ query => }.get( 5, TimeUnit.SECONDS ).rowsAffected === 1
}
}
L'invio del callback vuoto è orribile, ma non sono riuscito a trovare un modo per renderlo opzionale o qualcosa del genere, quindi al momento non ho molte idee su come dovrebbe essere questa API esterna.
Potrebbe essere qualcosa di simile:
handler.sendQuery( this.create ).addListener { query => println(query) }
Ma poi di nuovo, non sono sicuro di come le persone stiano organizzando le API in questo senso. Fornire esempi anche in altri progetti sarebbe fantastico.