Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Отзыв о сохранении данных Firestore в Интернете в автономном режиме

Автор вопроса: gillallОтветов: 2

Я ищу способ оставить отзыв пользователю моего веб-приложения Firebase/Firestore в автономном режиме. Давайте посмотрим код.

var colRef = db.collection('collectionName').doc('anyDoc');
var setWithMerge = colRef.set({
     'value': 'someValue',
 }, {
     merge: true
 })
 .then(function () {
     alert('Success');
 })
 .catch(function (error) {
     alert("Fail :" + error);
 });

Онлайн: вызовите функцию, и оповещение об успешном выполнении будет работать идеально.

Не в сети: вызовите функцию, и ничего не произойдет. Но когда пользователь выходит в интернет, приложение показывает все оповещения подряд.

Короче говоря, .then часть кода работает только онлайн. Мне нужна какая-то обратная связь для автономного пользователя.

google-cloud-firestorewebofflinesavefeedback

Ответы

Ответ 1 · рейтинг 1 · Frank van Puffelen

То, что вы видите, является ожидаемым поведением. Локальные операции записи не терпят регулярных сбоев, поэтому для них нет обработчика завершения. Если вы хотите что-то сделать после завершения локальной записи, просто используйте обычную логику кодирования и поместите ее после set:

var colRef = db.collection('collectionName').doc('anyDoc');
var setWithMerge = colRef.set({
     'value': 'someValue',
 }, {
     merge: true
 })
 alert("Value set");

Ответ 2 · gillall

Спасибо @Frank, @Blackwood. Я изменил оповещения на неблокирующие уведомления.

function doSomething() {
try {
    var colRef = db.collection('collectionName').doc('anyDoc');
    var setWithMerge = colRef.set({
            'value': 'someValue',
        }, {
            merge: true
        })
        .then(function () {
            alertify.notify('Data saved online.', 'success', 5);
        })
        .catch(function (error) {
            alert('Error: ' + error);//or
            //alertify.notify('Data saved online.', 'error', 10);
        });
    alertify.notify('Data saved on cache.', 'warning', 5);
} catch (error) {
    alert('Error: ' + error);
}}

В сети: вызывает функцию и запускает 2 уведомления (в кэше и онлайн) почти одновременно.

В автономном режиме: вызывает функцию, запускает 1 уведомление, и когда пользователь выходит в сеть, приложение показывает все ожидающие онлайн-уведомления подряд.

Очень приемлемое поведение. Я не говорю по-английски, простите мои ошибки.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы