Firebase — синхронный вызов проверки?

#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? Я думаю, нам просто трудно понять ваш вариант использования.