Firebase js库从非空数据库中检索空数据

时间:2018-04-28 20:32:15

标签: javascript firebase firebase-realtime-database

重现的步骤:

将您的firebase数据库初始化为:

{
  "restaurants" : [ {
    "address" : "via Rettifilo, 34 Castelguidone CH Italy",
    "title" : "Dama & Dama"
  }, {
    "address" : "Corso Umberto I, 3 Castelguidone CH Italy",
    "title" : "Bar sabatino"
  } ]
}

检查您的读/写firebase延迟规则是否

{
  "rules": {
    ".read": true,
    ".write": true
  }
}

执行此js代码:

firebase.inizializeApp(yourJsonConfig)
\*code*\
firebase.database().ref().once('value').then(function(snapshot){ 
    console.log(snapshot.val()); \\ this will print  Array(0)
})

预期行为:控制台日志"{'restaurants' ........}"

实际行为:控制台记录"Array(0)",即无数据!

我使用firebase js库(版本4.13.1)。我哪里错了?

2 个答案:

答案 0 :(得分:1)

您需要使用val()方法返回数据。

const float eRad = 6.5;
static float iter = 0.0;

void drawSphere(void)
{
  float x = 0.5;
  float y = 0.4;
  float z = 0.0;
  glMatrixMode(GL_PROJECTION | GL_MODELVIEW);
  glLoadIdentity();
  glClear(GL_COLOR_BUFFER_BIT);

// Draw the Ellipse
glColor3d(1.0, 0.0, 1.0);
glBegin(GL_LINE_STRIP);
for (float i = 0; i <= eRad; i += 0.1)
{
    glVertex2f(x*cos(i), y*sin(i));
}
glEnd();

//Draw the Sphere
glColor3d(1.0, 1.0, 0.0);
glPushMatrix();
glTranslatef(x*cos(iter), y*sin(iter), 0);
glutWireSphere(0.15, 30, 30);
glPopMatrix();
glFlush();
}

 void animation(void)
{
        iter = (iter < 6.5) ? iter+0.0001 : 0.0;
}
void Timer(int value) {
        glutTimerFunc(33, Timer, 0);
        glutPostRedisplay();
}
 int main(int argc, char** argv)
 {
   glutInit(&argc, argv);
   glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
   glutInitWindowSize(600, 600);
   glutInitWindowPosition(0, 0);
   glutCreateWindow("Moving Sphere Test");
   glutDisplayFunc(drawSphere);
   glutIdleFunc(animation);
   glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
   glViewport(0, 0, 600, 600);
   Timer(0);

   glutMainLoop();
}

修改:然后您的问题存在于您未展示的另一段代码中。

选中此示例:http://jsfiddle.net/zgfr91yd/

在控制台日志中:

enter image description here

查看我的数据:

enter image description here

每个餐厅的父母都需要一个独特的钥匙。您可以在Firebase中使用“推送”功能。

答案 1 :(得分:0)

传递给回调的snapshot参数是DataSnapshot类型的对象。您不应该假设DataSnapshot的JSON格式字符串只包含数据库中该位置的数据。从API文档中可以看出,DataSnapshot中有许多方法功能。

您要做的是在该快照上调用val(),以便从中提取JavaScript值。阅读API文档以进一步了解该对象可能包含的内容。