簡體   English   中英

如何將 Promise.then() 添加到 Array.push?

[英]How to add a Promise .then() to an Array.push?

但是,我有一個數組,其中一個 object 孩子需要從我的 Firebase 數據庫中的另一個位置獲取數據以顯示在數組中。 這需要 Promise。

如何在陣列中顯示來自 Promise 的數據?

  getListofReferrers() {

    //
    // 
    // Getting list of referrers from Firebase.
    this.eventData.getReferrersList().on('value', snapshot => {
      let rawList98 = [];
      snapshot.forEach(snap => { 
       
    // Bringing the information over into a local array to show on the page.     
        rawList98.unshift({
          id: snap.key,
          text: this.eventData.getOtherNameExternal(snap.val().userid).then( (v)=> {return v}),
          userid: snap.val().userid,
          username: snap.val().username,
          email: snap.val().useremail,
          referralPoints: this.eventData.numberWithCommas(this.eventData.getOtherProfileProperty(snap.val().userid, "referralPoints") || 0),
        });

         })
      // Taking the information into a "this." variable   
      this.referralList = rawList98;
      console.log(this.referralList);
    });

  }

顯示“用戶名”值時,我不斷收到:[object Promise]。

在 console.log(rawList98); 但是,我得到以下信息:

email: "pjoc@pjaguar.com"
id: "referrer9OxMTyUDfiXrLp9O65XW0hUbHgH2"
referralPoints: "0"
username: t
__zone_symbol__state: true
__zone_symbol__value: "John Doe"
[[Prototype]]: Object
userid: "9OxMTyUDfiXrLp9O65XW0hUbHgH2"

為什么它顯示從 Promise 收到的值,但我無法在 .then() 中捕獲它以正確分配給子“用戶名”? 我需要調用這個 Promise 來獲取 Firebase 數據庫中每個節點的用戶名

由於您需要等待用戶名可用才能構建 object,因此您需要將代碼放入.then中:

this.eventData.getUserName(snap.val().userid).then(v => {
  rawList98.unshift({
    id: snap.key,
    username: v,
    userid: snap.val().userid,
    email: snap.val().useremail
  });
})

或者,使用異步/等待:

async function someFunction () {
  const v = await this.eventData.getUserName(snap.val().userid);
  rawList98.unshift({
    id: snap.key,
    username: v,
    userid: snap.val().userid,
    email: snap.val().useremail
  });
}

您推入陣列的username屬性是 promise。 因此,要獲得其中的實際值,您需要使用thenawait

const user = rawList98.shift();
const username = await user.username;
console.log(username);

感謝弗蘭克·范·普菲倫。 這是我的問題的解決方案:我必須將unshift()放入一個變量中以獲取索引,然后使用它來分配username child。 我使用rawList98.length-user因為 unshift function 將數據添加到底部,而不是頂部。

getListofReferrers() {

    // Getting list of referrers from Firebase.
    this.eventData.getReferrersList().on('value', snapshot => {
      let rawList98 = [];
      snapshot.forEach(snap => { 
       
    var user
    
    user = rawList98.unshift({
          id: snap.key,
          username: null,
          userid: snap.val().userid,
          email: snap.val().useremail,
          referralPoints: this.eventData.numberWithCommas(this.eventData.getOtherProfileProperty(snap.val().userid, "referralPoints") || 0),
        });

this.eventData.getOtherNameExternal(snap.val().userid).then( (v)=> { rawList98[rawList98.length-user].username = v})

        
         })
      // Taking the information into a "this." variable   
      this.referralList = rawList98;
      console.log(this.referralList);
    });

  }

暫無
暫無

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

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