编程语言
首页 > 编程语言> > JavaScript-即使存在,我也无法访问数组中的对象

JavaScript-即使存在,我也无法访问数组中的对象

作者:互联网

这个问题已经在这里有了答案:            >            How do I return the response from an asynchronous call?                                    34个
此方法将从Firebase数据库检索的JSON对象存储到数组分数.

function loadScoresToArray(){
    databaseRef.orderByChild("Score").on("child_added", function (snap) {
        scores.push(snap.val());
    });
}

运行以上方法并打印分数内容

loadScoresToArray();
console.log(scores);

console.log(scores[0]);

输出

enter image description here

如此处所示,对象已正确添加到乐谱中.

但是我无法使用索引来检索它们.

阅读类似this之类的问题,我认为这可能是因为console.log(scores [0]);被调用时,数组仍然为空.尚未填充.这只是我的猜测.

我该如何解决?有没有办法创建一个延迟,直到填充数组?

解决方法:

But I can’t retrieve them using index.

那是因为您正在执行异步操作.无需等待响应,而是立即继续执行,并执行请求调用后的语句.

How do I solve this? Is there a way to create a delay until the array
is populated?

不,请不要延迟.您可以使用回调函数.

function loadScoresToArray(callback){
    databaseRef.orderByChild("Score").on("child_added", function (snap) {
        scores.push(snap.val());
        callback(scores);
    });
}

loadScoresToArray(function(scores){
  console.log(scores[0]);
});

另一个解决方案是使用Promise构造函数以执行异步操作.

function loadScoresToArray(){
    return new Promise(function(resolve, reject){
        databaseRef.orderByChild("Score").on("child_added", function (snap){
           scores.push(snap.val());
           resolve(scores);
        });
    });
}

loadScoresToArray().then(function(scores){
     console.log(scores[0]);
});

这里是解决您的问题的可能方法.

>带有异步/等待的承诺(ES2017)
>回调
>对then()的承诺(ES2015)

标签:javascript-objects,json,javascript
来源: https://codeday.me/bug/20191025/1928780.html