gpt4 book ai didi

javascript - 如何暂停 Javascript MAP 直到 Firebase Firestore 完成? Promise、异步/等待或两者兼而有之

转载 作者:行者123 更新时间:2023-12-01 00:30:31 25 4
gpt4 key购买 nike

我需要能够映射(或者如果需要的话,foreach)一组帐户。我想在更新帐户或将其添加为新帐户之前验证该帐户是否存在于 Firebase Firestore 中。问题是 map 继续运行,然后 Firebase Firestore 函数最终运行。我尝试将 Firestore 包装在它自己的 promise 中,但没有成功。我需要一切都按顺序运行。我知道我的 Promise 和/或 Async/Await 位于错误的位置。我仍在学习如何正确使用 Promise 和 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

我需要的结果:控制台.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

最佳答案

删除Promise.all,然后在for循环中await for doc:

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 - 如何暂停 Javascript MAP 直到 Firebase Firestore 完成? Promise、异步/等待或两者兼而有之,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58591958/

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