Cloud Firestore在事件中返回未定义

时间:2019-03-19 19:11:53

标签: firebase google-cloud-firestore cloud

所有人。

我正在尝试创建一个脚本,该脚本在Cloud Firestore中创建数据并将其返回。但是我无法访问数据(未定义),为什么?

那是我的脚本:

const tools = require('./bin/firebase');
const app = require('express')();
// eslint-disable-next-line new-cap
const server = require('http').Server(app);
const io = require('socket.io')(server);

server.listen(3000);

const db = tools.connectFirebase();

io.on('connection', (socket) => {
  const ipAddress = socket.handshake;

  console.log(ipAddress.address);

  db.collection('socket').doc('refresh').collection('2').doc('1').set({
    name: 'Los Angeles',
  });

  db.collection('socket').doc('refresh').onSnapshot((doc) => {
    console.log('Current data: ', doc.data());
  });

  socket.on('disconnect', () => {
    console.log('Disconnected.');
  });
});

这是此脚本返回的内容: Image

最后,这是我想返回的Cloud Firestore数据:Image

我需要返回这些节点,所以:基本上,我需要这样的东西:

{
    1: {
        name: "Los angeles:",
    },
    2: {
        name: "Washington DC",
    },
}

基本上,我需要修复它,任何人都可以帮助我进行处理?

(对不起我的英语水平,我正在努力提高)

1 个答案:

答案 0 :(得分:0)

请在下面尝试。您的set方法将在写入数据之前返回。它正在返回一个未来(承诺)。您必须使用.then()await等待它,才能读回数据。

  db.collection('socket').doc('refresh').collection('2').doc('1').set({
    name: 'Los Angeles',
  }).then(() => db.collection('socket').doc('refresh').onSnapshot((doc) => {
    console.log('Current data: ', doc.data());
  }));

编辑:抱歉,您正在读取/ socket / refresh,可能是空的。如上所述,其下的子集合不会作为json发送。您必须执行db.collection('socket').doc('refresh').collection('2').doc('1')才能阅读它们。您无法像预期的那样获得子树作为json。

继续,将一些数据放入/ socket / refresh,希望它不再是未定义的。