2017-11-18 8 views
0

오프라인 일 때 Firebase/Firestore 웹 앱 사용자에게 피드백을 제공하는 방법을 찾고 있습니다. 일부 코드를 볼 수 있습니다.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 부분은 온라인으로 만 실행됩니다. 오프라인 사용자에게 몇 가지 피드백이 필요합니다.

답변

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

들으 @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 개의 알림을 시작하며 사용자가 온라인 상태가되면 앱에 모든 종속 온라인 알림이 연속적으로 표시됩니다.

매우 적합한 동작입니다. 나는 영어를 못하고 실수를 용서한다.

관련 문제