收藏
回答

如何到时间自动取消置顶?

实现效果:当置顶后,需要按着置顶的时长,自动取消置顶。

如图:当置顶时长到了之后自动删除topping字段,以达到自动取消置顶的效果,自己写了一段代码,能够实现自动删除这个字段,但是当所有数据中都没有topping这个字段后就会报错。哪位大师提供一个更好的实现案例学习下


代码:

// 取消置顶
    async timer(){
        await app.loadUserInfo();
        let openid = await app.globalData.userInfo._openid;
        const toppings = await db.collection("wehicle").where({
            _openid: openid
        }).get()
        if(toppings){
            const wehicles = toppings.data;
            console.log(wehicles);
            wehicles.forEach((wehicle, index) => {
                const id = wehicle._id;
                console.log(id);
                if(wehicle.topping.timelength){
                    setTimeout(function(){
                        db.collection("wehicle").doc(id).update({
                            data:{
                                "topping":_.remove()
                            }
                        })
                    },wehicle.topping.timelength*1000*60)
                } 
            })
        }
    },


最后一次编辑于  10-08
回答关注问题邀请回答
收藏

2 个回答

  • showms
    showms
    10-10

    为啥要那么复杂,只需要判断topping是否超过一定时间或者是否为空就行了呀

    10-10
    有用
    回复 3
    • 蓝天☁
      蓝天☁
      发表于移动端
      10-10
      那是不是要在云函数设定一个定时器?把timelength改为未来要到期的时间?
      10-10
      回复
    • showms
      showms
      10-10回复蓝天☁
      入库的时候就指定一个到期时间呗
      10-10
      回复
    • 蓝天☁
      蓝天☁
      10-11回复showms
      入库指定的到期时间如图片这个可不可行?觉得这个只是用于置顶是否到期,不用于展示在页面上,就没有去做时间格式化,简单点。代码:confirm(e) {
              const that = this;
              const code = that.data.code;
              const timelength = new Date() + code*1000*60*60;
              console.log(timelength);
              const index = that.data.index;
              const wehicle = that.data.wehicles[index];
              const wehicles = that.data.wehicles;
              console.log(wehicle)
              wx.showLoading({
                  title: ”正在置顶中...”;
              })
                  wx.cloud.callFunction({
                      name: "topping",
                      data: {
                          id: wehicle._id,
                          timelength: timelength,
                      },
                      success: res => {
                          console.log(res);
                          if(!wehicle.topping){
                              wehicle.topping = (timelength)
                          }else{
                              wehicle.topping.push(timelength)
                          }
                          wehicle.istoppinged = true;
                          wehicles[index] = wehicle;
                          if (wehicle.topping) {
                              wx.hideLoading();
                              wx.showToast({
                                  title: ”恭喜!置顶成功!”;,
                              })
                              setTimeout(function () {
                                  that.setData({
                                      show_input: false,
                                      wehicles:wehicles
                                  })
                              }, 800)
                          } else {
                              wx.showToast({
                              title:”置顶失败,请重新置顶!”,
                              })
                          }
                      }
                  })
          },
      10-11
      回复
  • จุ๊บ
    จุ๊บ
    10-08

    不删字段,字段有默认值,根据值去处理是否置顶

    10-08
    有用
    回复 3
    • 蓝天☁
      蓝天☁
      10-08
      用setTimeout设定置顶时长可以?在网上查了些,用云函数设定定时器,没有案例,不知道怎么写代码
      10-08
      回复
    • จุ๊บ
      จุ๊บ
      10-08回复蓝天☁
      setTimeout 代码不执行,你这个也不执行吧?只能用 云函数的定时触发器,这写的很清楚,有啥看不懂?
      10-08
      回复
    • 蓝天☁
      蓝天☁
      10-08回复จุ๊บ
      setTimeout是有执行,效果就是比较迟钝,有时候从其他页面跳转过来就有,有时候没有反应,云函数这个定时器是有找到怎么写,怎么调用没有找到相关资料,没有专业的培训过,可能逻辑不行,前面写的代码虽然能够实现效果,估计都有些乱,都是东拼西凑的
      10-08
      回复
登录 后发表内容