javascript - 如何在 Firebase Firestore 完成之前暂停 Javascript MAP?Promise、Async/Await 或两者兼有
问题描述
我需要能够在一组帐户上映射(或者如果需要,foreach)。我想在更新或将其添加为新帐户之前验证该帐户是否存在于 Firebase Firestore 中。问题是地图继续运行,然后 Firebase Firestore 功能最终运行。我尝试将 Firestore 包装在它自己的承诺中,但它没有用。我需要一切正常运行。我知道我的 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
我需要的结果: 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
解决方案
删除Promise.all
, 并且只是await
for doc
infor
循环:
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();
}
}
})();
推荐阅读
- mysql - 使用字符位置向后搜索以查找子字符串的位置
- arrays - Delphi中的BYTE数组(BYTE [])等效于空终止一个整数吗?
- react-native - 将功能分配给导航选项时出错
- reactjs - 传入的值未放入 dynamodb
- java - 重新启动我的 Kafka Streams 应用程序时出现 OutOfMemoryError
- unity3d - 将张量流转换为统一后端(梭子鱼)的问题
- php - 24是偶数还是奇数?
- android - 通过在Firestore,Android中查询数组中的对象来获取集合的所有属性
- javascript - 如何将一个值从 DB 转换为数组
- javascript - 跨浏览器窗口浮动和弹跳框 - 如何实现