从firestore获取文档列表

TSR

我有一个accounts结构如下的收藏集

在此处输入图片说明

现在,我有一个拥有两个帐户的用户:

在此处输入图片说明

如何查询以获取此用户的帐户并将其作为承诺的解决方案返回?

这是我尝试过的。它返回[]

 getAccounts(user_id, userRef) {
        return new Promise((res, rej) => {
            this.db.runTransaction((transaction) => {
                return transaction.get(userRef.doc(user_id)).then((userDoc) => {
                    let accounts = []
                    if (!userDoc.exists) {
                        throw "User Document does not exist!";
                    }
                    let userData = userDoc.data()
                    let accountList = userData.accounts

                    for (var id in accountList){
                        transaction.get(this.ref.doc(id)).then(ans => {
                            accounts.push(ans.data())
                        }).catch(e => {
                            console.log(e)

                        })
                    }
                    return accounts
                }).then(function (ans) {
                    res(ans)
                }).catch((e) => {
                    console.log(e)
                });
            }).catch(function (err) {
                console.error(err);
                rej(err)
            });

        })
    }
雷诺·塔内克(Renaud Tarnec)

您只需要阅读一些文档,就无需使用事务由于您要并行执行两个(或多个)异步方法,这些方法返回一个Promise(即get()帐户文档的两个),因此应使用Promise.all()

遵循以下思路应该可以:

getAccounts(user_id, userRef) {
   return db.collection('users').doc(user_id).get()  //replaced since I am not sure what is this.db in your case
   .then(userDoc => {
       const promises = []
       if (!userDoc.exists) {
           throw "User Document does not exist!";
       }
       let userData = userDoc.data()
       let accountList = userData.accounts

       for (var id in accountList){
           promises.push(db.collection('accounts').doc(id).get())
       })
       return Promise.all(promises)
   })
   .then((results) => {
       return results.map(doc => doc.data());
    })
    .catch(err => {
        ....
    });
 }

请注意,由于我不确定100%的情况以及您的情况,因此DocumentReferences(即db.collection('users').doc(user_id)db.collection('accounts').doc(id)使用了“经典”定义随心所欲地适应!this.refthis.db

您也可以return new Promise((res, rej) => {})根据需要对其进行重做,但是总体原理保持不变。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章