gpt4 book ai didi

node.js - 从 firestore 获取文档列表

转载 作者:太空宇宙 更新时间:2023-11-04 00:06:09 25 4
gpt4 key购买 nike

我有一个集合帐户,结构如下:

enter image description here

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

enter image description here

如何进行查询以获取该用户的帐户并将其作为 promise 的解决方案返回?

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

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

})
}

最佳答案

您不需要使用事务,因为您只是阅读一些文档。由于您想要并行执行两个(或多个)返回 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 => {
....
});
}

请注意,我使用了 DocumentReference 的“经典”定义(即 db.collection('users').doc(user_id)db.collection('accounts').doc(id)),因为我不能 100% 确定您的情况下的 this.refthis.db 是什么。按照您的意愿进行调整即可!

您也可以根据需要使用 return new Promise((res, rej) => {}) 重新设计它,但整体理念保持不变。

关于node.js - 从 firestore 获取文档列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52231059/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com