Javascript - .length 给我 0 长度

标签 javascript arrays

数组初始化

var Collect = [];

所以我有一个 promise 参数,这样我就可以异步执行,因为从 firebase 检索数据然后将其插入数组 Collect 需要一些时间。这是我的代码:

function loadTables(){
    var promise = getDataFirebase();
    promise.then(function(){
        console.log("firsst");
        return ProcessOfData();
    }).then(function(){
        console.log(Collect);            //when printed, it shows the elements collected from firebase so the array is not 0.
         console.log(Collect.length);   // but when printeed here. it gives me 0. why? 
        return EndProcessLog();
    }).then(function(){

    });         
}

从 firebase 检索数据时的代码:

function getDataFirebase(){
    return new Promise (function(resolve,reject){
        refReview.on("value", function(snap){
            var data = snap.val();
            for(var key in data){              //data retrieved must be REVIEWEE NAME, REWIEVER NAME, RATING, ,CONTENT
                Collect.push({
                    "RevieweeName": data[key].revieweeID.firstname.concat(" ",data[key].revieweeID.lastname),
                    "ReviewerName": data[key].reviewerID.firstname.concat(" ",data[key].reviewerID.lastname),
                    rating:data[key].rating,
                    content: data[key].content
                })
            }//end of for loop

        }); //end of snap 
        resolve();   
    });
}

最佳答案

为什么不起作用?因为您在异步方法运行之前解决了 promise 。对象显示值的原因是控制台延迟加载对象。

你是做什么的?在回调内的 for 循环之后移动解析行。

refReview.on("value", function(snap) {
  var data = snap.val();
  for (var key in data) { //data retrieved must be REVIEWEE NAME, REWIEVER NAME, RATING, ,CONTENT
    Collect.push({
      "RevieweeName": data[key].revieweeID.firstname.concat(" ", data[key].revieweeID.lastname),
      "ReviewerName": data[key].reviewerID.firstname.concat(" ", data[key].reviewerID.lastname),
      rating: data[key].rating,
      content: data[key].content
    })
  } //end of for loop
  resolve(); < --RIGHT

}); //end of snap 
// resolve(); <-- WRONG

理想情况下,您可以 promise 不使用全局变量,通过解析传递值。

var myPromise = new Promise(function(resolve, reject) {
  var str = "Hello!";
  resolve(str);
});

myPromise.then(function(value) {
  console.log(value);
});

关于Javascript - .length 给我 0 长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48408665/

相关文章:

javascript - 如何在 Windows 8 JavaScript 应用程序中设置禁用按钮的样式?

java - For 循环创建一个数组,该数组存储一个数字的另一个数字的幂的值

javascript - 如何打印数组中列出的字典中的键和值,javascript

sql - 如何检查一个数组是否包含另一个数组的元素

java - 在运行时创建具有反射和泛型的类的数组

javascript - 如果div中没有​​值如何隐藏按钮

javascript - Tampermonkey 脚本 - 如何防止无限提交

java - 是否存在可编写 Javascript 的 FTP 上传 Java/Flash Applet?

javascript - EXTJS 复选框显示为 [object Object]

java - 对象未从数组列表中正确删除