Come si usa ORM asincroni senza enormi catene di callback?
-
20-09-2019 - |
Domanda
Sto utilizzando il plug-in relativamente immaturo Joose Javascript ORM (progetto pagina ) a persistere oggetti in un Appcelerator Titanium ( ) progetto mobile. Dal momento che di archiviazione lato client, l'applicazione deve controllare per vedere se il database viene inizializzato prima di avviare l'ORM poiché ispeziona le tabelle DB per costruire le classi.
Il mio problema è che questa sequenza di operazioni (e se questo è come questo, l'altro lungo la strada) prende un sacco di callback per completare. Ho un sacco di saltare nel codice che non è evidente a un manutentore e si traduce in alcuni grafici di chiamata complesse e quant'altro. Quindi, chiedo a queste domande:
- Come vi asincrono inizializzare un database e popolarlo con i dati di semi utilizzando un ORM che ha bisogno lo schema di essere corretto per funzionare?
- Avete strategie generali o link per asincrone / event-driven di programmazione e mantenendo il grafo delle chiamate semplice e comprensibile?
- Hai qualche suggerimento per sistemi a oggetti meta Javascript ORM / che funzionano con HTML 5 come un motore di storage e sono auspicabilmente quadro agnostica?
- Sono solo un grande newb e dovrebbe essere in grado di lavorare questo fuori con facilità?
Grazie ragazzi!
Soluzione
Prova flow.js (https://github.com/willconant/flow-js).
Altri suggerimenti
Date un'occhiata a NarrativeJS :
Narrative JavaScript è un piccolo estensione al linguaggio JavaScript che consente funzionalità di blocco per callback degli eventi asincroni. Questo rende codice asincrono rinfrescante leggibile e comprensibile.
Con Narrative JavaScript recupero di un documento con XmlHttp va da guardare in questo modo:
function handleResponse(responseText) {
document.getElementById("myElem").innerHTML = responseText;
}
fetch("http://www.url.com/", handleResponse);
a questo:
document.getElementById("myElem").innerHTML = fetch->("http://www.url.com/");
Peccato che il progetto non è più attiva: - (
dojo.Deferred () sembra anche di implementare una monade asincrono, anche se la sintassi non è chiaro come NarrativeJS.
C'è stato un certo lavoro da portare zucchero asincrona per CoffeeScript , ma in ultima analisi, non è stato accettato .
RxJS è un altro che si occupa di questo.