#javascript #jquery #jquery-ui #firebase #firebase-security
#javascript #jquery #jquery-пользовательский интерфейс #огневая база #firebase-безопасность #firebase
Вопрос:
У меня есть некоторый код пользовательского интерфейса jquery, который запускает серию обновлений firebase.
Я хочу отменить обработку события jquery, если первое обновление завершится неудачно.
function fbpush(ele)
// handler called by jquery event, push an HTML element to firebase
{ window.fb.child($(ele).attr("id")).set
( $(ele).html()
,function (error) {if (error) { /* cancel propagation */ };}
);
// block till firebase set returns (OK or fail)
}
Код вызывается (в данном случае), поэтому, когда jquery-ui сортируемый (связанный) div обновляется пользователем, новый html передается в firebase, где другие подписавшиеся пользователи получают обновление, удаляемое и отображаемое с минимальными накладными расходами / обработкой (часть экспериментальной многопользовательской игровой платформы / фреймворка). Проверка Firebase используется для обеспечения допустимости обновления. Если обновления завершаются неудачно, это не является фатальным, так как программа обновления обновит свой экран из FB с использованием исходного HTML-кода, но отмена события улучшает работу пользователя.
$(document.body).on("sortupdate",".fbpush",function(event,ui) { fbpush($(this)); });
Так что действительно синхронная версия набора была бы идеальной…
Идеи?
Комментарии:
1. Не существует синхронной версии
set
. Но почему бы вам просто не обработать это в обратном вызове, который у вас уже есть (function (error) { ... }
) ? Эта функция вызывается, когда Firebase завершает обновление.2. Если нажатие завершается ошибкой проверки firebase, я хочу отменить событие jquery — если я не блокирую, пока проверка завершается, событие jquery, возможно, уже завершилось, прежде чем я узнаю результат.
3. Это звучит как типичная проблема XY . Можете ли вы поделиться примером использования? Вероятно, есть гораздо лучшее решение, чем заставить асинхронные вещи вести себя синхронно.
4. Я не хочу дублировать проверку на стороне клиента и сервера — поэтому хочу полагаться только на проверку firebase (на стороне сервера). Позвольте клиенту выполнить попытку обновления, но отмените обновление, если оно не проходит проверку. — отменяя событие, мне не нужно беспокоиться о каких-либо других обработчиках, которые могли быть присоединены к событию.
5. Можете ли вы показать код, который вызывает fbpush? Я думаю, нам просто трудно понять ваш вариант использования.