Firebase 数据未正确更新

Firebase data is not updated properly

问题:数据总是更新为 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");
  }
}

我试了很多方法,但是代码还是不行。
对不起,如果我没有提出正确的问题顺便说一句

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

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