标签:javascript-objects json 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
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。