Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 云函数和firestore将数据保存到阵列中_Javascript_Google Cloud Firestore - Fatal编程技术网

Javascript 云函数和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

我试图从云firestore中获取谷歌应用程序上我的操作中的数据。我想搜索一个对象,然后将图像的链接提取到数组中。如果找到更多对象,则应将链接全部推送到数组中

这就是我所拥有的:

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);