我正在寻找一种在离线时向我的 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
部分仅在线运行。我需要为离线用户提供某种反馈。
您看到的是预期的行为。本地写入操作不会经常失败,因此没有它们的完成处理程序。如果你想在本地写入完成后做一些事情,只需使用正常的编码逻辑并将其放在set
之后:
var colRef = db.collection('collectionName').doc('anyDoc');
var setWithMerge = colRef.set({
'value': 'someValue',
}, {
merge: true
})
alert("Value set");
Thx @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 个通知,当用户上线时,应用连续显示所有悬垂在线通知。
一种非常可接受的行为。我不会说英语,请原谅我的错误。