Мне нужно иметь возможность сопоставлять (или, если нужно, foreach) множество учетных записей. Я хочу проверить, существует ли учетная запись в Firebase Firestore, прежде чем я обновлю ее или добавлю как новую учетную запись. Проблема в том, что карта продолжает работать, а затем наконец запускается функция Firebase Firestore. Я попытался обернуть Firestore своим собственным обещанием, но это не сработало. Мне нужно, чтобы все было в порядке. Я знаю, что мои Promise и / или Async / Await находятся в неправильных местах. Я все еще учусь правильно использовать обещания и async / await.
let db = admin.firestore();
(async () => {
const accountInfo = [{ accountNumber: 'a' }, { accountNumber: 'b' }, { accountNumber: 'c' }];
for (let i = 0, j = accountInfo.length; i < j; i++) {
console.log("i: ", i);
await Promise.all(
accountInfo
.map(account => {
const {accountNumber} = account;
console.log(accountNumber);
// Firebase - Firestore
let docRef = db.collection('accounts').doc(accountNumber);
docRef.get().then(function (doc) {
console.log("doc.exists ", doc.exists)
if (doc.exists) {
firebaseUpate();
}
else {
firebaseAdd();
}
})
})
)
}
})();
Результаты, которые я получаю:
[0] i: 0
[0] a
[0] b
[0] c
[0] i: 1
[0] a
[0] b
[0] c
[0] i: 2
[0] a
[0] b
[0] c
[0] doc.exists false
[0] doc.exists false
[0] doc.exists false
[0] doc.exists false
[0] doc.exists false
[0] doc.exists false
[0] doc.exists false
[0] doc.exists false
[0] doc.exists false
Необходимые мне результаты: Console.log ()
[0] i: 0
[0] a
[0] doc.exists false
[0] i: 1
[0] b
[0] doc.exists false
[0] i: 2
[0] c
[0] doc.exists false