javascript - 如何在循环中使用for并从firebase查询数据
问题描述
我有一个查询可以获取我的 firebase 数据库中的所有用户键。这些键保存到一个数组中。然后,我想遍历数组并在循环查询中查找用户名。问题是它在加载名字时停止 - 即使数组中有 1000 个键,循环也不会查询?
var i;
for (i = 0; i < emailArray.length; i++) {
userIDgotten = emailArray[i];
console.log(userIDgotten);
return firebase.database().ref('/users/' + userIDgotten).once('value').then(function(snapshotUser) {
const name = snapshotUser.val().name;
console.log("NAME: " + name);
allTicketEmailsFromUsers = allTicketEmailsFromUsers + ", " + name;
console.log(allTicketEmailsFromUsers);
});
}
我没有收到任何错误,但循环在检索到名字后才停止。
解决方案
once()方法是异步的,并返回一个 Promise 。
由于您想使用once()
并行执行多个查询,因此您需要使用Promise.all()如下:
var promises = [];
for (var i = 0; i < emailArray.length; i++) {
userIDgotten = emailArray[i];
console.log(userIDgotten);
promises.push(firebase.database().ref('/users/' + userIDgotten).once('value'));
}
Promise.all(promises)
.then(function(results) {
var allTicketEmailsFromUsers = "";
results.forEach(function(snapshotUser) {
const name = snapshotUser.val().name;
console.log("NAME: " + name);
allTicketEmailsFromUsers = allTicketEmailsFromUsers + ", " + name;
});
console.log(allTicketEmailsFromUsers);
}
推荐阅读
- python - URLLib.Request 在使用 cron (CentOS) 执行时返回连接超时
- python - 使用您刚刚在烧瓶上运行的函数的数据渲染模板
- exception - Draw.io Uncaught TypeError: dialog.showSaveDialogSync 不是一个函数
- python - 创建 N 维 numpy 数组列表的列表
- c# - c# KeyEventArgs 与 lambda 表达式
- php - php echo 数据库行结果成卡片
- typescript - TypeScript 泛型 TypedArray:TypedArray 不可分配给 T
- javascript - 单击动态创建的 td 后,如何在 js 中创建一个 div 以填充屏幕?
- typo3 - 如何使用 extbase 插入 sys_categories
- php - 可以在 div 中显示的 jquery 和 ajax 中包含进程计数器