Enz*_*zio 5 javascript json javascript-objects
此方法将从 firebase 数据库检索到的 JSON 对象存储到数组分数。
function loadScoresToArray(){
databaseRef.orderByChild("Score").on("child_added", function (snap) {
scores.push(snap.val());
});
}
Run Code Online (Sandbox Code Playgroud)
运行上面的方法并打印分数的内容
loadScoresToArray();
console.log(scores);
console.log(scores[0]);
Run Code Online (Sandbox Code Playgroud)
输出
如此处所见,对象已正确添加到分数中。
但我无法使用索引检索它们。
阅读像类似的问题这个我想这可能是因为当console.log(scores[0]);被调用时,阵列仍然是空的。它尚未被填充。这只是我的猜测。
我该如何解决这个问题?有没有办法在填充数组之前创建延迟?
但我无法使用索引检索它们。
那是因为您正在执行异步操作。执行不会等待response,而是立即继续,并执行请求调用之后的语句。
我该如何解决这个问题?有没有办法在数组填充之前创建延迟?
不,不要使用延迟。您可以使用一个callback函数。
function loadScoresToArray(callback){
databaseRef.orderByChild("Score").on("child_added", function (snap) {
scores.push(snap.val());
callback(scores);
});
}
loadScoresToArray(function(scores){
console.log(scores[0]);
});
Run Code Online (Sandbox Code Playgroud)
另一种解决方案是使用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]);
});
Run Code Online (Sandbox Code Playgroud)
以下是解决您的问题的可能方法。
ES2017+)进行 PromiseES2015+)| 归档时间: |
|
| 查看次数: |
2843 次 |
| 最近记录: |