Firebase Firestore:用内容填充ID数组的最佳方法是什么?

Firebase Firestore:用内容填充ID数组的最佳方法是什么?,firebase,firebase-realtime-database,google-cloud-firestore,Firebase,Firebase Realtime Database,Google Cloud Firestore,我有一个包含用户ID的对象数组 const userIDs= [{key: 'user_1'},{key: 'user_2'}, {key: 'user_3'}]; 我想用云firestore中的用户数据填充它 const userIDs= [ {key: 'user_1', name: 'name1'}, {key: 'user_2', name: 'name2'}, {key: 'user_3', name: 'name3'} ]; 什么是最快、最便宜的方法 这是我目前的做法

我有一个包含用户ID的对象数组

const userIDs= [{key: 'user_1'},{key: 'user_2'}, {key: 'user_3'}];
我想用云firestore中的用户数据填充它

const userIDs= [
{key: 'user_1', name: 'name1'},
{key: 'user_2', name: 'name2'}, 
{key: 'user_3', name: 'name3'}
];
什么是最快、最便宜的方法

这是我目前的做法

      const filledUsers = [];
            for (let index in userIDs) {
                const user = Object.assign({}, concatUsers[index]);
                const snapshot = await usersRef.doc(user.key).get();
                filledUsers.push(Object.assign(user, snapshot.data()));
            })

在for循环内使用
wait
效率低下。相反,最好使用
Promise.all
在执行的
ref.get()
列表中,然后使用
wait

如果需要降低价格,则需要应用缓存

请参阅下面的源代码

// module 'db/users.js'

const usersRef = db.collection('users');

export const getUsers = async (ids = []) => {
    let users = {};

    try {
        users = (await Promise.all(ids.map(id => usersRef.doc(id).get())))
            .filter(doc => doc.exists)
            .map(doc => ({ [doc.id]: doc.data() }))
            .reduce((acc, val) => ({ ...acc, ...val }), {});

    } catch (error) {
        console.log(`received an error in getUsers method in module \`db/users\`:`, error);
        return {};

    }

    return users;
}

// Usage:
//
// (await getUsers(['user_1', 'user_2', 'user_3']))

谢谢!看起来棒极了!如何将其映射到数组?@Alexandr,
constusersarray=Object.keys(usersMap.map)(userId=>({userId,…usersMap[id]}))