Я ищу способ оставить отзыв пользователю моего веб-приложения 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 часть кода работает только онлайн. Мне нужна какая-то обратная связь для автономного пользователя.
Ответ 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 уведомление, и когда пользователь выходит в сеть, приложение показывает все ожидающие онлайн-уведомления подряд.
Очень приемлемое поведение. Я не говорю по-английски, простите мои ошибки.