2016-04-24 1 views
0

Das Problem: die Daten werden immer in 4350,
aktualisiert und die Warnung halten Pop-up-in.Firebase-Daten werden nicht ordnungsgemäß aktualisiert

Der Code:

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

habe ich viele Möglichkeiten versuchen, aber der Code noch nie funktionieren.
Sorry, wenn ich keine richtige Frage fragt btw

Antwort

0

Es ist ein wenig unklar, was dein Problem ist, aber eine Vermutung ist, dass es läuft darauf hinaus, dieses Fragment des Codes nach unten:

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

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

Schreiben Daten zu Firebase ist ein asynchroner Vorgang. Der Aufruf set()startet dieser Vorgang, aber bis zum Zeitpunkt window.location, wird der Schreibvorgang noch nicht erledigt.

Die Lösung ist für den Schreibvorgang zu warten, bevor die Navigation weg zu beenden, die Sie durch die Verwendung eines Firebase completion listener tun können:

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

Leider frank, es sieht aus wie ich den falschen Code schreiben. Der richtige Code ist oben geschrieben. –