Bruno
Bruno

Reputation: 633

Firebase promise - Query.once failed: Was called with 1 argument. Expects at least 2

I'm trying to fill an array with some data from Firebase using promises. Here's the DB structure:

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

The code:

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 get Uncaught Error: Query.once failed: Was called with 1 argument. Expects at least 2.

Does that mean I have to add at least 2 properties to Foo and Bar? Ex. Foo = {playerName: name, score: 50}

The current DB arrangement fits my needs.

Upvotes: 6

Views: 3950

Answers (2)

Frank van Puffelen
Frank van Puffelen

Reputation: 599491

This error message happens when you try to use the Promisified API on a pre-Promisified SDK.

Callbacks (that other answers have suggested) will work on any 2.x version of the Firebase SDK.

We introduced an alternative syntax using promises in Firebase's JavaScript SDK version 2.4. See an example of once().then() in this jsbin: http://jsbin.com/qiranu/edit?js,console

Are you using Firebase JavaScript SDK version 2.4 or later (that's where promises were introduced)?

Upvotes: 10

Jeremy Jackson
Jeremy Jackson

Reputation: 2257

Don't use then. Once takes a callback function as the second parameter:

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

Upvotes: 0

Related Questions