2017-11-18 17 views
0

私はFirebase/Firestore Webアプリケーションのユーザーにオフラインでフィードバックを与える方法を探しています。いくつかのコードを見てみましょう。Firestore web save data offline feedback

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

オンライン:関数を呼び出して、ほぼ同時に(オンラインキャッシュされたと)2つの通知を起動します。

オフライン:機能を呼び出し、1通知を開始し、ユーザーがオンラインになると、アプリはすべての懸垂のオンライン通知を連続して表示します。

非常に容認される動作です。 私は英語を話さない、私の間違いを許す。