Как вы используете асинхронные ORM без огромных цепочек обратных вызовов? - PullRequest
4 голосов
/ 17 марта 2010

Я использую относительно незрелый плагин Joose Javascript ORM ( страница проекта ) для сохранения объектов в мобильном проекте Appcelerator Titanium ( страница компании ). Поскольку это хранилище на стороне клиента, приложение должно проверить, инициализирована ли база данных, прежде чем запускать ORM, поскольку оно проверяет таблицы БД для создания классов.

Моя проблема в том, что для этой последовательности операций (и если это так, другие вещи в будущем) требуется много обратных вызовов для завершения. Я много прыгаю в коде, который не очевиден для сопровождающего и приводит к некоторым сложным графам вызовов и так далее. Итак, я задаю эти вопросы:

  1. Как бы вы асинхронно инициализировали базу данных и заполнили ее начальными данными, используя ORM, который требует правильной схемы для работы?
  2. Есть ли у вас какие-либо общие стратегии или ссылки для асинхронного / событийно-ориентированного программирования и сохранения графа вызовов простым и понятным?
  3. Есть ли у вас какие-либо предложения для Javascript ORM / мета-объектных систем, которые работают с HTML 5 в качестве механизма хранения и, как мы надеемся, не зависят от фреймворка?
  4. Я просто большой новичок и должен быть в состоянии справиться с этим легко?

Спасибо, ребята!

Ответы [ 2 ]

2 голосов
/ 28 ноября 2010

Попробуйте flow.js (https://github.com/willconant/flow-js).

1 голос
/ 17 марта 2010

Взгляните на NarrativeJS :

Рассказ JavaScript маленький расширение на язык JavaScript что позволяет блокировать возможности для асинхронные обратные вызовы событий. это делает асинхронный код освежающе читаемый и понятный.

При использовании Narrative JavaScript выборка документа с использованием XmlHttp выглядит следующим образом:

function handleResponse(responseText) {
    document.getElementById("myElem").innerHTML = responseText;
}
fetch("http://www.url.com/", handleResponse);

к этому:

document.getElementById("myElem").innerHTML = fetch->("http://www.url.com/");

Жаль, что проект больше не активен: - (

dojo.Deferred () также, похоже, реализует асинхронную монаду, хотя синтаксис не так понятен, как NarrativeJS.

Была проведена некоторая работа по доведению асинхронного сахара до CoffeeScript , но в конечном итоге он не был принят .

RxJS - еще один, который занимается этим.

...