2016-02-20 6 views
5

Я пытаюсь заполнить массив некоторыми данными из Firebase, используя обещания. Вот структура БД:Пожар Firebase - Query.once failed: вызывается с 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); 
}); 

Я получаю Uncaught Error: Query.once failed: Was called with 1 argument. Expects at least 2.

Означает ли это, что я должен добавить по крайней мере 2 свойства Foo и Bar? Ex. Foo = {playerName: name, score: 50}

Текущее расположение БД соответствует моим потребностям.

+0

Я уверен, что я использовал обещание 'once()' без проблем. Дайте мне минуту, чтобы настроить jsfiddle/jsbin. –

+1

Работает для меня: http://jsbin.com/qiranu/edit?js,console. Вы используете Firebase JavaScript SDK версии 2.4 или более поздней версии (там были введены обещания). –

+0

Обычно я считаю это опечаткой, поэтому я прокомментирую (чтобы проголосовать за то, что она была подтверждена). Но вы можете быть правы, учитывая сообщение об ошибке, другие могут найти это. –

ответ

8

Эта ошибка происходит, когда вы пытаетесь использовать API Promisified на предварительно Promisified SDK.

Обратные вызовы (предлагаемые другими ответами) будут работать с любой версией SDK Firebase версии 2.x.

Мы представили альтернативный синтаксис, используя обещания в SDK версии 2.4 Firebase. См. Пример once().then() в этом jsbin: http://jsbin.com/qiranu/edit?js,console

Вы используете Firebase JavaScript SDK версии 2.4 или более поздней версии (вот где были введены обещания)?

+1

Оказалось, что я использовал более старую версию SDK (2.2.1). С этого момента мне нужно обратить внимание на такие детали. Еще раз спасибо! – Bruno

+0

Вы говорите «мы», поэтому, если вы имеете в виду это буквально (например, вы находитесь в проекте), возможно, стоит обновить документы, чтобы показать, что 'successCallback' теперь optiona. –

+0

Yup. Это обновление находится в стадии разработки (я на самом деле думал, что он уже вышел, но, очевидно, это не так). Мы изменили большинство методов (например, [set()] (https://www.firebase.com/docs/web/api/firebase/set.html), в то время как эта функция появилась, но почему-то забыла 'once() '. –

0

Не использовать then. После того, как принимает функцию обратного вызова в качестве второго параметра:

сообщение

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

Я знаю, но [это] (https://www.firebase.com/blog/2016-01-21-keeping-our-promises.html) статья говорит, что я могу использовать 'then' после' once() '. – Bruno

+1

@JeremyJackson callback действительно будет работать над любой версией Firebase версии 2.x. Но мы ввели альтернативный синтаксис, используя обещания в SDK версии 2.4 Firebase. Это то, что пытается использовать OP. –

 Смежные вопросы

  • Нет связанных вопросов^_^