2016-02-20 9 views
5

私は約束を使ってFirebaseのデータを配列に書き込もうとしています。ここでDB構造です:Firebase約束 - Query.onceが失敗しました:1つの引数で呼び出されました。少なくとも2を予想します

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

コード:

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

I私はfooとbarに少なくとも2プロパティを追加する必要が意味Uncaught Error: Query.once failed: Was called with 1 argument. Expects at least 2.

んを取得しますか? Ex。 Foo = {playerName:name、score:50}

現在のDBの配置は私のニーズに合っています。

+0

私は 'once()'約束を問題なく使用していると確信しています。 jsfiddle/jsbinを設定する時間を与えてください。 –

+1

私のために働く:http://jsbin.com/qiranu/edit?js,console。 Firebase JavaScript SDKバージョン2.4以降を使用していますか(約束が導入された場所です)。 –

+0

私は通常それを誤植と見なしています。それが私がコメントした理由です。しかし、あなたが正しいかもしれない、エラーメッセージが与えられれば、他の人がこれを見つけるかもしれない。 –

答えて

8

あなたは事前Promisified SDKにPromisifiedのAPIを使用しようとすると、このエラーメッセージが発生します。

コールバック(他の回答が示唆している)は、Firebase SDKの2.xバージョンでも動作します。

FirebaseのJavaScript SDKバージョン2.4で約束を使用して、別の構文を導入しました。このjsbinのonce().then()の例を参照してください。http://jsbin.com/qiranu/edit?js,console

Firebase JavaScript SDKバージョン2.4以降(これは約束が導入されたところです)はありますか?

+1

わたしは古いSDKバージョン(2.2.1)を使用していました。これからはそのような詳細に注意を払う必要があります。再度、感謝します! – Bruno

+0

あなたは「私たち」と言います。文字通り(例えばあなたがプロジェクトにいることを意味している)場合は、 'successCallback'がオプションになったことを示すためにドキュメントを更新する価値があります。 –

+0

そのアップデートはパイプラインに入っている(私は実際にそれが既に出ていたと思ったが、明らかにそれはなかった)。フィーチャーが出てくると同時に、ほとんどのメソッド(例:[set()](https://www.firebase.com/docs/web/api/firebase/set.html)を変更しましたが、 'once() '。 –

0

thenを使用しないでください。かつて2番目のパラメータとしてコールバック関数を取ります

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

私は知っていますが、[this](https://www.firebase.com/blog/2016-01-21-keeping-our-promises.html)の記事では、 'once()'の後に 'then'を使用できると書いてあります。 – Bruno

+1

@JeremyJacksonコールバックは実際にはFirebase SDKの2.xバージョンで動作します。しかし、FirebaseのJavaScript SDKバージョン2.4の約束を使って、別の構文を導入しました。これは、OPが使用しようとしているものです。 –

関連する問題