我是javascript和firestore的菜鸟。
我一直在尝试从我的Firestore集合中检索所有文档ID。
例如。如果我的收藏夹中有两个文档,我想获取一个包含所有收藏夹中的文档ID的数组。 即:var myArray = ['HhYaTvok4qJaIAVI9R0','2AO4RbZ6K5Db4q3OSqi'];
我一直在尝试使用Firestore文档(https://github.com/firebase/snippets-node/blob/9ae3a00985b53025fdc82716046882af71b6009d/firestore/main/index.js#L622-L627)中的一些代码。
但它不会在对话流中检索任何内容
在index.js(嵌入式编辑器)中的代码下面。
// The function to get documents ids
const arraymaker = (db) => {
let platformRef = db.collection('quiz');
let all_doc = platformRef.get();
return all_doc
.then(snapshot => {
var myArray =[];
snapshot.forEach(doc => {
myArray.push(doc.id);
});
})
.catch(err => {
console.log('Error getting documents', err);
});
};
// database retrieve
app.intent('Read Random Quizz', (conv) => {
// Trying to get Data from firestone DB,
//var myArray = ['HhYaTvok4qJaIAVI9dR0','2AO4RbZ6K5Db4q3OS7qi'];
var myArray = arraymaker(db);
var rand = myArray[Math.floor(Math.random() * myArray.length)];
var platformRef = db.collection("quiz").doc(rand);
return platformRef.get()
.then( snap => {
var dat = "";
var answ = "";
if (snap.exists) {
dat = snap.data().question;
answ = snap.data().answer;
}
// This is the response for Actions on Google
reply(conv,`The question is ${dat} and the answer is ${answ}`);
})
.catch( err => {
console.log("error...", err);
});
});
我认为问题来自:
var myArray = arraymaker(db);
它只是不返回带有所有文档ID的myArray。
当我单独运行该函数时,我可以看到一个Firestore将所有ID附加到一个数组中,但是仅在Firestore日志中。它不会返回不在会话流中的最终myArray。
再次,我是JavaScript以及firestore的菜鸟。 任何建议或意见将不胜感激!提前非常感谢您!
答案 0 :(得分:1)
您必须在秒示例中返回all_doc。 app.intent必须像第一个示例一样返回诺言,而在第二个示例中您将不返回任何内容。
此外,您还可以用console.log覆盖myArray!并为每个文档调用回复,我对firestore并不熟悉,但是我认为您必须为每个文档调用回复并更改覆盖myArray
<MDMenuItem>:
on_release:
...
app.root.menu_button.text = self.text
<MyScreen>:
...
MDRaisedButton:
id: mainbutton
...
on_release:
root.menu_button = mainbutton
MDDropdownMenu(items=root.menu_items, width_mult=4).open(self)
MDRaisedButton:
id: secondbutton
...
on_release:
root.menu_button = secondbutton
MDDropdownMenu(items=root.menu_items, width_mult=4).open(self)
答案 1 :(得分:0)
我做到了,这似乎行得通。最初,我想要的是检索随机文档,所以我要粘贴找到的解决方案。如前所述,我是javascript的菜鸟,这可能是一个非常糟糕的代码。因此,任何关于如何改善此问题的建议都将受到欢迎。
var GlobalVariable;
// The function to get documents ids in an array called GlobalVariable
const arraymaker = () => {
let platformRef = db.collection('quiz');
let all_doc = platformRef.get();
return all_doc
.then(snapshot => {
var myArray =[];
snapshot.forEach(doc => {
myArray.push(doc.id);
GlobalVariable= myArray;
});
})
.catch(err => {
console.log('Error getting documents', err);
});
};
// database retrieve
app.intent('Read Random Quizz', (conv) => {
arraymaker(); // restart function to get all the IDs in an array
// take a random ID and read the document
var rand = GlobalVariable[Math.floor(Math.random() * GlobalVariable.length)];
var platformRef = db.collection("quiz").doc(rand);
return platformRef.get()
.then( snap => {
var dat = "";
var answ = "";
if (snap.exists) {
dat = snap.data().question;
answ = snap.data().answer;
}
// This is the response for Actions on Google
reply(conv,`The question is ${dat} and the answer is ${answ}`);
})
.catch( err => {
console.log("error...", err);
});
});