2016-05-29 1 views
0

Ich bin puzzled mit dem folgenden Problem. Während ich eine kleine Webseite mache, um einige Daten zu sehen, die ich auf Firebase habe, gibt es einen Ort, an dem ich nicht darauf zugreifen kann, was ich will. Natürlich weiß ich, dass an diesem Ort etwas auf dem Server ist. Hier ist der Code, es scheint, dass localRef.once() nie aufgerufen wird.ref.once() nicht auf Firebase

var dbLocalURL = "https://atinytestapp.firebaseio.com/MyList/rc99/"; 
var localRef = new Firebase(dbLocalURL); 
localRef.once("value", function(snapshot) { 
    // WE NEVER COME HERE !!!! 
    for (record in snapshot.val()) { 
     document.write(record) 
     var recordRef = new Firebase(dbLocalURL+record+"/"); 
     recordRef.once("value", function(rcdSnapshot) { 
      var rcdData = rcdSnapshot.val(); 
      document.write(rcdData[“someKey”]) 
     }) 
    } 
}, function (errorObject) { 
    // WE NEVER COME HERE !!!! 
    console.log("The read failed: " + errorObject.code); 
    document.write("The read failed: " + errorObject.code); 
}); 

Meine Seite den Zugriff auf die Daten funktioniert wie es sollte überall, außer an einer Stelle mit dem obigen Verhalten. Neben habe ich auch überprüft, dass die URL, die ich verwende, korrekt ist, indem Sie es in einen Browser einfügen und die Daten sehen, die ich erwarte. Was kann ich vermissen? Ich hoffe, dass mir jemand einen Hinweis geben kann.

+0

Der Code/Flow funktioniert für mich: http://jsbin.com/vujinaloci/edit?html,js,console. Kannst du eine ähnliche minimale Jsbin erstellen, die das Problem reproduziert? –

Antwort

0

(Anmerkung: das ist die neue Firebase 3-Wege) Diese nicht in der Frage im Code enthalten war, aber hier ist die Initialisierung auf (hier der Vollständigkeit halber)

// Set the configuration for your app: Replace with your project's config object 
    var config = { 
    apiKey: '<your-api-key>', 
    authDomain: '<your-auth-domain>', 
    databaseURL: '<your-database-url>', 
    storageBucket: '<your-storage-bucket>' 
    }; 
    firebase.initializeApp(config); 

    // Get a reference to the database service 
    var database = firebase.database(); 

und unter der Annahme, möchten Sie gerade lesen Sie die Daten einmal:

firebase.database().ref('MyList/rc99').once('value').then(function(snapshot) { 
    for (record in snapshot.val()) { //unordered records, see comment 
     document.write(record) 
     ... 

Firebase 2

var ref = new Firebase("https://atinytestapp.firebaseio.com/MyList/rc99/"); 

ref.on("value", function(snapshot) { 
    snapshot.forEach(function(record) { //ordered records, see comment 
    document.write(record) 
    ... 
}); 

Hinweis: Stellen Sie sicher, dass die URL korrekt ist, als ob dies nicht funktioniert. Ich habe versucht, Ihre URL und es scheint nicht zu reagieren.

+0

Verwenden Sie '' snapshot.forEach() 'anstelle von' for (Aufnahme in snapshot.val()) '. Letzteres wird die Reihenfolge der Kinder beibehalten. –

+0

Ich habe das Problem endlich gelöst, es war ein Synchroproblem. Ich habe nicht darauf gewartet, dass Dinge passieren, wie ich sollte. Ich musste eine Weile mit Versprechen kämpfen und jetzt funktioniert es. Danke vielmals. – Michel