Javascript Firebase承诺-Query.once失败:使用1个参数调用。至少需要2个
我正在尝试使用来自Firebase的一些数据填充一个数组。以下是数据库结构:Javascript Firebase承诺-Query.once失败:使用1个参数调用。至少需要2个,javascript,firebase,Javascript,Firebase,我正在尝试使用来自Firebase的一些数据填充一个数组。以下是数据库结构: - domain name(or something) |--highscore |--Foo: 50 |--Bar: 60 守则: var arr=[]; highscoreRef.child('highscore').once('value').then(function(snapshot) { snapshot.forEach(function(data) { arr.p
- 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);
});
我得到未捕获错误:Query.once失败:用1个参数调用。至少需要2个。
这是否意味着我必须为Foo和Bar添加至少两个属性?例如Foo={playerName:name,score:50}
当前的数据库安排符合我的需要。不要使用
,然后使用。Once将回调函数作为第二个参数:
当您尝试在预发布的SDK上使用Promisified API时,会出现此错误消息。
回调(其他答案建议)将适用于Firebase SDK的任何2.x版本
我们在Firebase的JavaScript SDK 2.4版中引入了另一种使用承诺的语法。请参见此jsbin中的once().then()
示例:
您是否正在使用Firebase JavaScript SDK 2.4版或更高版本(承诺就是在这里引入的) 我知道,但文章说我可以使用然后之后的一次()
@JeremyJackson回调确实可以在任何2.x版本的Firebase SDK上使用。但我们在Firebase的JavaScript SDK 2.4版中引入了另一种使用承诺的语法。这就是OP试图使用的。我很确定我使用了once()
承诺,没有任何问题。请给我一点时间来设置一个jsfiddle/jsbin.Works for me:。你是使用FixBaseJavaScript SDK版本2.4或更高版本(这是承诺被引入的地方)。我通常认为它是一个打印错误,这就是为什么我评论(一旦确认了就投一票)。但是你可能是对的,因为有错误信息,其他人可能会发现这一点。@Frank van Puffelen,谢谢你的快速回复!我从未想过要检查我使用的是哪个版本。结果是2.2.1。我从其中一个教程中复制了CDN,忘记了在那里检查。我的错。不管怎样,我可以把你的评论标记为一个答案?@FrankvanPuffelen:是的,在这种情况下,它很有用。原来我使用的是一个较旧的SDK版本(2.2.1)。从现在起,我需要注意这些细节。再次感谢!你说“我们”,所以如果你的意思是字面上的意思(例如,你在项目中),那么更新文档以显示successCallback
现在是optiona.Yup可能是值得的。该更新正在进行中(我实际上认为它已经发布了,但显然没有)。我们更改了大多数方法(例如,在功能推出的同时,却不知何故忘记了one()
)。
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);
});