2017-11-18 379 views
0

我正在寻找一种方法,以便在离线状态下为我的Firebase/Firestore Web应用程序的用户提供反馈。让我们看看一些代码。Firestore web保存数据离线反馈

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部分代码只能在线运行。我需要为离线用户提供某种反馈。

回答

0

你看到的是预期的行为。本地写操作不会定期失败,所以没有完成处理程序。如果你想要做的事本地写完成后,只需使用普通的逻辑编码,并把它的set后:

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

但是,您能否绝对确信即使是当地的写作在这一点上已经完成了?在未履行的承诺之前写入的数据是否被返回? – DarkNeuron

+0

我所描述的是系统应该如何表现。如果您发现与我所说的行为有冲突,请发帖或[提交错误报告](https://firebase.google.com/support/contact/bugs-features/)。 –

+0

我们还没有,只是好奇。很高兴知道它应该如何工作。 – DarkNeuron

0

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); 
}} 

Online:调用函数,几乎同时启动2个通知(缓存和联机)。

离线:调用该函数,启动1通知,当用户上线时,应用程序显示所有下线在线通知。

非常可以接受的行为。 我不会说英语,原谅我的错误。