2017-11-18 377 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通知,當用戶上線時,應用程序顯示所有下線在線通知。

非常可以接受的行爲。 我不會說英語,原諒我的錯誤。