【问题标题】:How to pause Javascript MAP until Firebase Firestore is done? Promise, Async/Await or both如何在 Firebase Firestore 完成之前暂停 Javascript MAP? Promise、Async/Await 或两者兼有
【发布时间】: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

【问题讨论】:

    标签: javascript node.js firebase google-cloud-firestore


    【解决方案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();
          }
      }
    })();
    

    【讨论】:

      猜你喜欢
      • 2021-02-07
      • 2016-11-22
      • 2020-11-29
      • 2021-11-05
      • 1970-01-01
      • 1970-01-01
      • 2021-06-20
      • 2023-03-10
      • 2021-05-01
      相关资源
      最近更新 更多