2016-02-20 9 views
5

Bekliyor Bir diziyi Firebase'den vaatler kullanarak bazı verilerle doldurmaya çalışıyorum. İşte DB yapısı:Firebase söz - Query.once başarısız oldu: 1 argüman ile çağrıldı. En az 2

- domain name(or something) 
    |--highscore 
    |--Foo: 50 
    |--Bar: 60 

kodu:

var arr=[]; 
highscoreRef.child('highscore').once('value').then(function(snapshot) { 
    snapshot.forEach(function(data) { 
    arr.push({playerName: data.key(), score: data.val()}); 
    }); 
    }, function(error) { 
    console.error(error); 
}); 

Ben Foo ve Bar en az 2 özelliklere eklemek zorunda anlamına Uncaught Error: Query.once failed: Was called with 1 argument. Expects at least 2.

İşe Yarar mı? Ör. Foo = {playerName: ad, puan: 50}

Güncel DB düzeni gereksinimlerime uyar.

+0

Oldukça eminim ki bir kere() 'sözünü sorunsuz kullanıyorum. Bana jsfiddle/jsbin kurmak için bir dakika ver. –

+1

Benim için çalışır: http://jsbin.com/qiranu/edit?js,console. Firebase JavaScript SDK sürüm 2.4 veya daha sonraki bir sürümünü kullanıyorsunuz (sözler verilmişti). –

+0

Normalde bunu bir yazım hatası olarak görüyorum, bu yüzden yorum yapıyorum (onaylandıktan sonra bir oylama yapmak). Ama haklı olabilirsiniz, hata mesajı verildiğinde, diğerleri bunu bulabilir. –

cevap

8

Bu hata iletisi oluşur.

Geri aramalar (diğer yanıtlar önerilmiştir) Firebase SDK'sının herhangi bir 2.x sürümü üzerinde çalışacaktır.

Firebase'in JavaScript SDK sürüm 2.4'teki sözleri kullanarak alternatif bir sözdizimi kullanıma sunduk. Bu jsbin içinde bir once().then() örneğine bakın: http://jsbin.com/qiranu/edit?js,console

Firebase JavaScript SDK sürüm 2.4 veya sonraki sürümünü kullanıyorsunuz (bu, sözlerin verildiği yerdir)?

+1

Çıktı Eski bir SDK sürümü kullanıyordum (2.2.1). Bundan böyle detaylara dikkat etmeliyim. Tekrar teşekkürler! – Bruno

+0

"Biz" derken, eğer gerçekten bunu (yani, projede iseniz) kastediyorsanız, doc'ları "successCallback" seçeneğinin şimdiki seçenek olarak göstermek için güncellemeye değer olabilir. –

+0

Yup. Bu güncelleme boru hattında (aslında çoktan gittiğini düşündüm, ama açıkça yoktu). Pek çok yöntemi değiştirdik (ör. [Set()] (https://www.firebase.com/docs/web/api/firebase/set.html) aynı zamanda özellik ortaya çıktı, fakat bir şekilde once bir kez unuttum() '. –

0

then'u kullanmayın. Bir kez ikinci parametre olarak bir geri çağırma işlevi alır: Önceden Promisified SDK hakkında Promisified API kullanmaya çalıştığınızda

https://www.firebase.com/docs/web/api/query/once.html

var arr=[]; 
highscoreRef.child('highscore').once('value', function(snapshot) { 
    snapshot.forEach(function(data) { 
    arr.push({playerName: data.key(), score: data.val()}); 
    }); 
    }, function(error) { 
    console.error(error); 
}); 
+0

Biliyorum, ama [bu] (https://www.firebase.com/blog/2016-01-21-keeping-our-promises.html) makalesinde "sonra" sonra bir kez() 'yi kullanabileceğim yazıyor. – Bruno

+1

@JeremyJackson geri bildirimleri, Firebase SDK'sının herhangi bir 2.x sürümü üzerinde çalışacaktır. Ancak Firebase'in JavaScript SDK sürüm 2.4'teki sözlerini kullanarak alternatif bir sözdizimi kullanıma sunduk. OP'nin kullanmaya çalıştığı şey budur. –

İlgili konular