Como você usa ORMs assíncronos sem enormes cadeias de retorno de chamada?
-
20-09-2019 - |
Pergunta
Estou usando o plugin ORM do Joose JavaScript relativamente imaturo (página do projeto) para persistir objetos em um titânio do Appcelerator (página da empresa) projeto móvel. Como é o armazenamento lateral do cliente, o aplicativo deve verificar se o banco de dados é inicializado antes de iniciar o ORM, pois inspeciona as tabelas DB para construir as classes.
Meu problema é que essa sequência de operações (e se essa é assim, outras coisas no futuro) leva muitos retornos de chamada para concluir. Eu tenho muito pulando no código que não é aparente para um mantenedor e resulta em alguns gráficos de chamadas complexos e outros enfeites. Então, eu faço estas perguntas:
- Como você inicializaria de maneira assíncrona um banco de dados e o preencheria com dados de sementes usando um ORM que precisa do esquema para funcionar?
- Você tem alguma estratégia geral ou links para programação assíncrona/orientada por eventos e manter o gráfico de chamadas simples e compreensível?
- Você tem alguma sugestão para os sistemas JavaScript ORMS/Meta Objects que funcionam com o HTML 5 como mecanismo de armazenamento e esperamos que sejam a estrutura agnóstica?
- Sou apenas um grande Newb e devo conseguir resolver isso com facilidade?
Obrigado pessoal!
Solução
Tente Flow.js (https://github.com/willconant/flow-js).
Outras dicas
Dar uma olhada em Narrativa:
O JavaScript narrativo é uma pequena extensão para a linguagem JavaScript que permite recursos de bloqueio para retornos de chamada de eventos assíncronos. Isso torna o código assíncrono refrescantemente legível e compreensível.
Com o JavaScript narrativo buscando um documento usando o XMLHTTP vai de parecer assim:
function handleResponse(responseText) {
document.getElementById("myElem").innerHTML = responseText;
}
fetch("http://www.url.com/", handleResponse);
para isso:
document.getElementById("myElem").innerHTML = fetch->("http://www.url.com/");
Pena que o projeto não está mais ativo :-(
dojo.deferred () Também parece implementar uma mônada assíncrona, embora a sintaxe não seja tão clara quanto as narrativas.
Houve algum trabalho para trazer açúcar assíncrono para CoffeeScript, mas finalmente não foi aceito.
RXJS é outro que lida com isso.