但是,我有一個陣列,其中一個物件子項需要從 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: "[email protected]"
id: "referrer9OxMTyUDfiXrLp9O65XW0hUbHgH2"
referralPoints: "0"
username: t
__zone_symbol__state: true
__zone_symbol__value: "John Doe"
[[Prototype]]: Object
userid: "9OxMTyUDfiXrLp9O65XW0hUbHgH2"
為什么它顯示了從 Promise 收到的值,但我無法在 .then() 中捕獲它以正確分配給子“用戶名”?我需要呼叫這個 Promise 來獲取 Firebase 資料庫中每個節點的用戶名
編輯(解決方案):
感謝弗蘭克·范·普菲倫。這是我的問題的解決方案:我必須將變數放入unshift()一個變數中以獲取索引,然后使用它來分配username孩子。我使用rawList98.length-userunshift 函式是因為將資料添加到底部,而不是頂部。
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);
});
}
uj5u.com熱心網友回復:
username您推入陣列的屬性是一個承諾。因此,要獲得其中的實際值,您需要使用thenor await:
const user = rawList98.shift();
const username = await user.username;
console.log(username);
uj5u.com熱心網友回復:
由于您需要等待用戶名可用才能構造物件,因此您需要將代碼放入.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
});
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/416524.html
標籤:
