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]);
输出
如此处所示,对象已正确添加到乐谱中.
但是我无法使用索引来检索它们.
阅读类似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