Saya harus dapat memetakan (atau jika perlu, foreach) melalui berbagai akun. Saya ingin memverifikasi apakah akun tersebut ada di Firebase Firestore sebelum saya memperbaruinya atau menambahkannya sebagai akun baru. Masalahnya adalah peta terus berjalan dan kemudian fungsi Firebase Firestore akhirnya berjalan. Saya mencoba membungkus Firestore dengan janjinya sendiri tetapi tidak berhasil. Saya membutuhkan segalanya untuk berjalan dengan baik. Saya tahu Janji dan/atau Async/Menunggu saya berada di tempat yang salah. Saya masih belajar cara menggunakan janji dan async/menunggu dengan benar.

    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();
                            }
                        })
                    })
            )
        }
    })();

Hasil yang saya dapatkan:

[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

Hasil yang saya butuhkan: 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
0
user3111472 28 Oktober 2019, 16:38

1 menjawab

Jawaban Terbaik

Hapus Promise.all, dan cukup await untuk doc di for loop:

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();
      }
  }
})();
2
marzelin 28 Oktober 2019, 13:58