首页 > 解决方案 > 如何在循环中使用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);
    });
}

我没有收到任何错误,但循环在检索到名字后才停止。

标签: javascriptfirebasefirebase-realtime-database

解决方案


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);
}

推荐阅读