收藏
回答

【小白问题】如何保证云数据库一条数据push进去以后再去获取?

我再做一个聊天,发送以后再获取刚刚发送的消息的高度,但每次都是取到“null”,感觉是因为还没有push进去就调用获取的函数了,请问应该如何保证数据已经push进去后,然后再调用获取的方法

回答关注问题邀请回答
收藏

2 个回答

  • showms
    showms
    2023-04-06

    这个是获取高度的代码,push的代码贴出来

    2023-04-06
    有用
    回复 10
    • 昱熙格
      昱熙格
      2023-04-06
      sendMsg() {

          let that = this
          //show代表了数据库表中的showTime属性,是否显示消息时间
          var show = false
          //无记录时,true
          if (this.data.chats.length == 0)
            show = true
          //判断上下两条消息的时间差决定是否显示时间,这里设置了2分钟:120000毫秒,可自行修改
          else {
            if (Date.now() - this.data.chats[this.data.chats.length - 1].sendTimeTS > 120000)
              show = true
          }
          const _ = db.command
          //消息空白处理
          if (!that.data.textInputValue) {
            wx.showToast({
              title: '不能发送空白信息',
              icon: 'none',
            })
            return
          }

          //消息内容赋值 文本高度在这里设置
          const doc = {
            openid: that.data.openid,
            msgText: "text",
            textContent: that.data.textInputValue,
            //这里获取文本同时计算高度放入到数据库
            textHeight:that.data.textHeight,
            sendTime: util.formatTime(new Date()),
            sendTimeTS: Date.now(),
            showTime: show,
          }
          //添加数据库表中该记录的records数组,并跳转页面到底部
          chatroomCollection.where({
            _openid: _.or(_.eq(that.data.openid), _.eq(that.data.match_openid)),
            match_openid: _.or(_.eq(that.data.openid), _.eq(that.data.match_openid))
          })
            .update({
              data: {
                records: _.push(doc)
              }
            })
            .then(res => {
              that.goBottom()
            })

          //消息设空
          that.setData({
            textInputValue: ""
          })


              //测试代码 组件高度===========
              var query = wx.createSelectorQuery();
              //选择id
              let i = this.data.chats.length;
              console.log('#'+ 'textID_' + i);
              query.select('#'+ 'textID_' + i).boundingClientRect()
              query.exec(function(res) {
                  //res就是 所有标签为mjltest的元素的信息 的数组
                  console.log(res);
                  //取高度
                  console.log(res[0].height);
              })
              //测试代码 组件高度===========


        },
      2023-04-06
      回复
    • showms
      showms
      2023-04-06回复昱熙格
      这不就是异步问题吗,改成在setData回调函数里面去获取高度
      2023-04-06
      回复
    • 昱熙格
      昱熙格
      2023-04-07回复showms
      这样写对吗?貌似没办法再setData 里面获取组件高度吧
      2023-04-07
      回复
    • showms
      showms
      2023-04-07回复昱熙格
      that.setData({
      textInputValue:"xxx"

      }, ()=>{
      //在这里获取高度
      })
      2023-04-07
      回复
    • 昱熙格
      昱熙格
      2023-04-07回复showms
      我试了下,log没有打印出来,进不到那个获取高度的函数体
      2023-04-07
      回复
    查看更多(5)
  • 跨商通
    跨商通
    2023-04-06

    只有我一个人看不出与云数据库有毛线关系吗?

    2023-04-06
    有用
    回复 1
    • 昱熙格
      昱熙格
      2023-04-06
      await有关系,但我不会用
      2023-04-06
      回复
登录 后发表内容