如何在 Firebase Firestore 完成之前暂停 Javascript MAP? Promise、Async/Await 或两者兼有
Posted
技术标签:
【中文标题】如何在 Firebase Firestore 完成之前暂停 Javascript MAP? Promise、Async/Await 或两者兼有【英文标题】:How to pause Javascript MAP until Firebase Firestore is done? Promise, Async/Await or both 【发布时间】:2020-02-23 18:43:14 【问题描述】:我需要能够映射(或者如果需要,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
【问题讨论】:
【参考方案1】:删除Promise.all
,只删除await
for doc
in 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();
)();
【讨论】:
以上是关于如何在 Firebase Firestore 完成之前暂停 Javascript MAP? Promise、Async/Await 或两者兼有的主要内容,如果未能解决你的问题,请参考以下文章
如何在 iOS XCUITest 期间配置 Firebase
如何使用颤振在 Firebase 云 Firestore 中添加多个节点
Firebase 云功能与 Firestore 返回“已超过截止日期”
如何将我的 Firebase 实时数据库转移到 Firebase Cloud Firestore