使用Node.js发送数组以响应Firebase函数。我无法发送数组。
我试图在循环中发送响应。它有效,但只发送一个值。
const admin = require('firebase-admin');
const functions = require('firebase-functions');
admin.initializeApp(functions.config().firebase);
let db = admin.firestore();
var dat =[];
var dat1 =[];
db.collection('users').get().then(function(snapshot){
snapshot.forEach(element => {
// snapshot.forEach(function(doc){
db.collection('users').doc(doc.id).collection('profile').doc(doc.id).collection("pet").doc(doc.id).get().then((snapshot) => {
// dat.push(snapshot.data()['bio']+"");
dat.push(element.id);
});
return snapshot;
})
.catch((err) => {
console.log('Error getting documents', err);
});
dat.forEach(element =>{
db.collection('users').doc(element.id).collection('profile').doc(element.id).collection('pet').doc(element.id).get().then((snapshot) =>{
dat1.push(snapshot.data()['bio']);
return snapshot;
}).catch((err) => {
console.log('Error getting documents', err);
});
});
exports.helloWorld = functions.https.onRequest(function(request, response){
response.send(dat1);
});
它始终显示为空,但其中应该有一个数组。
答案 0 :(得分:0)
您不能简单地声明一些顶级代码并期望它们在函数被调用之前运行(并完成)。
调用该函数时必须执行的所有代码都应在exports.helloWorld
函数内部,或从那里调用。
类似这样:
exports.helloWorld = functions.https.onRequest(function(request, response){
var dat =[];
var dat1 =[];
db.collection('users').get().then(function(snapshot){
snapshot.forEach(element => {
// snapshot.forEach(function(doc){
db.collection('users').doc(doc.id).collection('profile').doc(doc.id).collection("pet").doc(doc.id).get().then((snapshot) => {
// dat.push(snapshot.data()['bio']+"");
dat.push(element.id);
});
return snapshot;
})
.catch((err) => {
console.log('Error getting documents', err);
});
dat.forEach(element =>{
db.collection('users').doc(element.id).collection('profile').doc(element.id).collection('pet').doc(element.id).get().then((snapshot) =>{
dat1.push(snapshot.data()['bio']);
return snapshot;
}).catch((err) => {
console.log('Error getting documents', err);
});
});
response.send(dat1);
});
我不确定我是否了解helloWorld
函数之外的代码结构,因此我只是将其复制/粘贴到上面的正确位置以显示需要发生的事情。