Javascript 云函数和firestore将数据保存到阵列中
我试图从云firestore中获取谷歌应用程序上我的操作中的数据。我想搜索一个对象,然后将图像的链接提取到数组中。如果找到更多对象,则应将链接全部推送到数组中 这就是我所拥有的:Javascript 云函数和firestore将数据保存到阵列中,javascript,google-cloud-firestore,Javascript,Google Cloud Firestore,我试图从云firestore中获取谷歌应用程序上我的操作中的数据。我想搜索一个对象,然后将图像的链接提取到数组中。如果找到更多对象,则应将链接全部推送到数组中 这就是我所拥有的: let array = []; //Everything should be in here var collectionRef = db.collection('shoes'); var query = collectionRef.where('sport', '==', 'tennis'); query.get
let array = []; //Everything should be in here
var collectionRef = db.collection('shoes');
var query = collectionRef.where('sport', '==', 'tennis');
query.get().then(function(results) {
if(results.empty) {
console.log("No documents found!");
} else {
// go through all results
results.forEach(function (doc) {
array.push(document.data().name);
});
}
}).catch(function(error) {
console.log("Error getting documents:", error);
});
var prodpic = array[0]; // Array is not filled because in output always "undefined"
我确实想在以后的程序中使用prodpic中的img链接。我希望我的问题很清楚,任何人都能帮助我找到错误。数据是从Cloud Firestore异步加载的。这意味着,在分配var prodpic=array[0]时,它尚未加载 用几个日志语句替换大部分代码最容易看出这一点:
console.log("Before starting query");
query.get().then(function(results) {
console.log("In query results");
})
console.log("After starting query");
运行此代码时,输出为:
在开始查询之前
启动查询后
在查询结果中
这可能不是您所期望的,但很好地解释了为什么var prodpic=array[0]无法工作:数据尚未加载,因此array[0]为空
要处理异步加载,必须确保需要数据的代码位于then回调中。因此:
query.get().then(function(results) {
if(results.empty) {
console.log("No documents found!");
} else {
// go through all results
results.forEach(function (doc) {
array.push(document.data().name);
});
var prodpic = array[0];
}
}).catch(function(error) {
console.log("Error getting documents:", error);
});
有关这方面的更多信息,请阅读Doug的博客:
一个额外的优化:如果您只关心第一个匹配的文档,那么使用限制查询更有效:
这就是我要找的!我以前读过异步的东西,但现在我在我的代码中看到了它,它变得清晰了!
var query = collectionRef.where('sport', '==', 'tennis').limit(1);