Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Firebase承诺-Query.once失败:使用1个参数调用。至少需要2个_Javascript_Firebase - Fatal编程技术网

Javascript Firebase承诺-Query.once失败:使用1个参数调用。至少需要2个

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

我正在尝试使用来自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.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);
});