Firebase数据未正确更新

时间:2016-04-24 10:46:07

标签: javascript cordova firebase firebase-realtime-database

问题:数据总是更新到4350,
警报会随时弹出。

代码:

// Get no antrian function
function getNoAntri(tipe, username, name) {
  // Define firebase URL
  var faskesRef = new Firebase("https://cepatsembuh.firebaseio.com/" + tipe + "/faskes/" + username);

  // Log firebase URL
  console.log('Url :' + "https://cepatsembuh.firebaseio.com/" + tipe + "/faskes/" + username);

  // Warn user that this fiture need internet
    alert('Fitur ini membutuhkan internet untuk mengambil data');

  // Confirmation
  alert("Mohon konfirmasi ulang");
  var nama = prompt("Masukan nama"),
  nik = prompt("Masukan NIK:");
  if (nama != "" || nik.length != 16) {
    var pasien = new Firebase("https://cepatsembuh.firebaseio.com/" + tipe + '/pasien/');
    // Initialize data
    faskesRef.on("value", function(snapshot) {
      // Update variables
      var data = snapshot.val().antrian,
      one = 1,
      sum = data + one;

      // Update nomor antrian
      faskesRef.update({
        nama: name,
        antrian: sum
      });

      // Print data
      alert('No antrian: ' + snapshot.val().antrian);

      // Push data to firebase
      pasien.push().set({
        nama: nama,
        nomor_antrian: snapshot.val().antrian
      })
    });
  } else {
    // Error message
    alert("Input anda tidak valid. \n Anda tidak bisa mendapatkan nomor antrian");
  }
}

我尝试了很多方法,但代码仍然无法运行。
对不起如果我没有问一个正确的问题btw

1 个答案:

答案 0 :(得分:0)

有些不清楚你的问题是什么,但有一个有根据的猜测是它归结为你的代码片段:

// Push input value to firebase
pasien.push().set({
  nama: nama,
  nik: nik,
  lokasi: lokasi
});

window.location.href = 'option/' + 'available.html';

将数据写入Firebase是一种异步操作。调用set() 启动该操作,但是在设置window.location时,写操作还没有完成。

解决方案是在导航之前等待写入操作完成,您可以使用Firebase completion listener来完成:

// Push input value to firebase
pasien.push().set({
  nama: nama,
  nik: nik,
  lokasi: lokasi
}, function(error) {
    if (!error) {
        window.location.href = 'option/' + 'available.html';
    }
    else {
        // TODO: handle error
    }
});