Fork me on GitHub
#clojure-italy
<
2019-05-10
>
Andrea Imparato11:05:30

buongiorno a tutti!

Andrea Imparato11:05:00

domanda da niubbo che non ha mai fatto cose async… sto usando un driver async per postgres che ovviamente usa async.core per comunicare con il db. Ora il mio problema è quando chiudere le connessioni del db. Con async qual’è il modo migliore per sapere che tutte le chiamate async hanno finito di eseguire? Devo wrappare tutto in una promise mi sa eh?

mdallastella11:05:25

Non ti conviene aprire e chiudere la connessione al db ad ogni query

Andrea Imparato11:05:45

sisi certo, ho un pool di connessioni per il db

Andrea Imparato12:05:03

il problema mio è la coordinazione di quando chiudere il pool

Andrea Imparato12:05:30

mi sa che uso put!, il worker inserisce e mi ritorna l’id

Andrea Imparato12:05:52

ed aspetto fino a quando tutte le righe non sono state inserite

mdallastella12:05:30

Scusa, sono fuori e non ho la doc di core.async sotto mano

Andrea Imparato15:05:03

non ha senso usarlo solo in un blocco try-catch?

richiardiandrea15:05:14

di solito per queste cose uso mount (or integrant) - ti serve un modo per controllare il lifecycle del db e quelle due librerie fanno esattamente quello

richiardiandrea15:05:41

Stuart Sierra e' stato il primo a descrivere questo pattern

Andrea Imparato15:05:21

sì ho letto di mount è che volevo fare io a mano diciamo 🙂

richiardiandrea15:05:50

ah scusa magari sai gia' quindi 😄

richiardiandrea15:05:29

a mano se il component e' Closeable e sei nello stesso code path puoi usare https://clojuredocs.org/clojure.core/with-open