Вам не нужно использовать транзакцию, поскольку вы просто читаете некоторые документы. Поскольку вы хотите параллельно выполнять два (или более) асинхронных метода, которые возвращают обещание (т.е. два 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
s (то есть db.collection('users').doc(user_id)
и db.collection('accounts').doc(id)
), так как я не уверен на 100%, что такое this.ref
и this.db
в вашем случае. Просто адаптируйся как хочешь!
Вы также можете переработать его с помощью return new Promise((res, rej) => {})
, как пожелаете, но общая философия остается прежней.