簡體   English   中英

如何等待數組完成,然后執行 function?

[英]How to wait array until complete, then execute the function?

我有一些麻煩。 我希望我的 function 在我的陣列完成后執行。 但是我的 function 執行雖然我的數組不完整。 你能修復我的代碼嗎?

const historyPermintaanObat2 = obat => {
let array = [];
db.child("itemPermintaan")
  .orderByChild("id")
  .equalTo(obat.id)
  .on("child_added", snapshot => {
    let obj = snapshot.val();
    let registerPermintaanRef = db.child(
      `registerPermintaan/${obj.idPermintaan}`
    );
    registerPermintaanRef.once("value", snap => {
      let username = snap.val().username;
      let createdAt = snap.val().createdAt;
      let approvedAt = snap.val().approvedAt;
      let unit = snap.val().unit;
      let obj2 = { ...obj, username, createdAt, approvedAt, unit };
      array.push(obj2);

    });
  });
return array;
};

結果是[]空數組。 如果我更改return array.length > 0 && array什么都不會發生..

我想通了,使用oncePromise.all()

const historyPermintaanObat2 = obat => {
db.child("itemPermintaan")
  .orderByChild("id")
  .equalTo(obat.id)
  .once("value", snapshot => {
    let array = [];
    let obj = Object.values(snapshot.val());
    obj.forEach(e => {
      let registerPermintaanRef = db.child(
        `registerPermintaan/${e.idPermintaan}`
      );
      let promise = registerPermintaanRef.once("value").then(snap => {
        let username = snap.val().username;
        let createdAt = snap.val().createdAt;
        let approvedAt = snap.val().approvedAt;
        let unit = snap.val().unit;
        let obj2 = { ...e, username, createdAt, approvedAt, unit };
        return obj2;
      });
      array.push(promise);
    });
    return Promise.all(array).then(value => {
      return value;
    });
  });
 };

這是我有Promise.all 和 Firebase DataSnapshot.forEach的參考

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM