我想把我从firebase得到的快照推到一个数组中,这样我就可以通过它进行映射,不知何故,对象总是覆盖数组,而不是附加到数组本身!
下面是我的函数
_getMessages = async () => {
await firebase.database().ref('User-Message').child(this.state.fromUser).child(this.state.toUser).on('child_added', async (snapshot) => {
let message_array = [];
let message_id = await snapshot.key;
let message_ref = await firebase.database().ref('Message').child(message_id).once('value', async (payload) => {
await message_array.push(payload.val())
})
console.log(message_array);
})
}它一直像这样记录日志
[{
toId : 'id',
text : 'message',
fromId : 'id',
time : timestamp
}]
[{
toId : 'id',
text : 'message',
fromId : 'id',
time : timestamp
}]
[{
toId : 'id',
text : 'message',
fromId : 'id',
time : timestamp
}]
[{
toId : 'id',
text : 'message',
fromId : 'id',
time : timestamp
}]我希望它在一个数组中,这样我就可以映射它。
我如何才能做到这一点?
发布于 2018-09-09 06:51:58
_getMessages = () => {
let message_array = [];
var isLoaded = false;
var self = {
onArrayChanged: () => {
console.log(message_array);
},
currentArray: () => {
return message_array;
},
load: ()=>{
if(isLoaded)
return Promise.resolve();
return new Promise((res,rej)=>{
firebase.database().ref('User-Message').child(this.state.fromUser).child(this.state.toUser).on('child_added', (snapshot) => {
let message_id = snapshot.key;
var promiseArray = [];
promiseArray.push(new Promise(res1,rej1)=>{
firebase.database().ref('Message').child(message_id).once('value', (payload) => {
message_array.push(payload.val());
if(isLoaded)
self.onArrayChanged();
else
res1();
});
});
Promise.all(promiseArray).then(()=>{
isLoaded = true;
res();
}).catch(rej);
});
});
}
};
return self;
}
// Usage
var messages = _getMessages();
try{
await messages.load();
console.log("loaded");
console.log(messages.currentArray);
}catch(e){
}https://stackoverflow.com/questions/52239661
复制相似问题