Мне нужно иметь возможность отображать (или, если необходимо, 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
1 ответ
Удалите Promise.all
и просто await
для doc
в цикле for
:
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);
const { accountNumber } = accountInfo[i];
console.log(accountNumber);
// Firebase - Firestore
let docRef = db.collection("accounts").doc(accountNumber);
const doc = await docRef.get();
console.log("doc.exists ", doc.exists);
if (doc.exists) {
firebaseUpate();
} else {
firebaseAdd();
}
}
})();
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript/JS) и его различных диалектах/реализациях (кроме ActionScript). Обратите внимание, что JavaScript — это НЕ Java. Включите все теги, относящиеся к вашему вопросу: например, [node.js], [jQuery], [JSON], [ReactJS], [angular], [ember.js], [vue.js], [typescript], [стройный] и т. д.