如何将 Promise .then() 添加到 Array.push?
How to add a Promise .then() to an Array.push?
我有一个数组,但是其中一个子对象需要从我的 Firebase 数据库中的另一个位置获取数据以显示在数组中。这需要一个承诺。
如何在数组中显示来自 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 数据库中每个节点的用户名
由于需要等待用户名可用才能构造对象,所以需要将代码放在.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/await:
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
属性 是一个承诺。所以要在那里获得实际值,您需要使用 then
或 await
:
const user = rawList98.shift();
const username = await user.username;
console.log(username);
感谢 Frank van Puffelen。这是我的问题的解决方案:我必须将 unshift()
放在一个变量中以获取索引,然后使用它来分配 username
子级。我使用 rawList98.length-user
因为 unshift 函数将数据添加到底部,而不是顶部。
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);
});
}
我有一个数组,但是其中一个子对象需要从我的 Firebase 数据库中的另一个位置获取数据以显示在数组中。这需要一个承诺。
如何在数组中显示来自 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 数据库中每个节点的用户名
由于需要等待用户名可用才能构造对象,所以需要将代码放在.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/await:
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
属性 是一个承诺。所以要在那里获得实际值,您需要使用 then
或 await
:
const user = rawList98.shift();
const username = await user.username;
console.log(username);
感谢 Frank van Puffelen。这是我的问题的解决方案:我必须将 unshift()
放在一个变量中以获取索引,然后使用它来分配 username
子级。我使用 rawList98.length-user
因为 unshift 函数将数据添加到底部,而不是顶部。
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);
});
}