首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >react-本机firebase将快照推送到阵列

react-本机firebase将快照推送到阵列
EN

Stack Overflow用户
提问于 2018-09-09 05:47:24
回答 4查看 1.4K关注 0票数 0

我想把我从firebase得到的快照推到一个数组中,这样我就可以通过它进行映射,不知何故,对象总是覆盖数组,而不是附加到数组本身!

下面是我的函数

代码语言:javascript
复制
  _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);

    })

  }

它一直像这样记录日志

代码语言:javascript
复制
[{
    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
}]

我希望它在一个数组中,这样我就可以映射它。

我如何才能做到这一点?

EN

Stack Overflow用户

发布于 2018-09-09 06:51:58

代码语言:javascript
复制
_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){

    }
票数 0
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52239661

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档