所有人。
我正在尝试创建一个脚本,该脚本在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",
},
}
基本上,我需要修复它,任何人都可以帮助我进行处理?
(对不起我的英语水平,我正在努力提高)
答案 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,希望它不再是未定义的。