收藏
回答

用触发器定时发送消息,只想发送一次,但为什么会发送多条?

因为是得用户允许才会发出,所以我在用户提交一条日记时用了

wx.requestSubscribeMessage({

      tmplIds: ['Rq5eGHbeyzlS8KIdqySLtpXtf8nCftcC3c_CdvR15_s'], // 此处可填写多个模板 ID,但低版本微信不兼容只能授权一个

      success(res) {

        console.log('已授权接收订阅消息')

      },


    })

  }

下面是云函数,listnum.total只有两条,按照逻辑应该就是给两个微信号各自发送两条信息就好了,

但是如果我的日记提交了多条,触发器定时的那个点,一个用户就会收到多条信息,

如果我用一个按钮去调用云函数,就只会收到一条信息,这是为什么 ?


// 云函数入口文件

const cloud = require('wx-server-sdk')

cloud.init();

const db = cloud.database();

const userda = db.collection('users');

const template_id = 'Rq5eGHbeyzlS8KIdqySLtpYtf8nCftcC3c_CdvR15_s'; // 小程序模板消息模板 id


// 云函数入口函数

exports.main = async (event, context) => {

  const wxContext = cloud.getWXContext()

  var d = new Date();

  var dateshow = d.getFullYear() + '-' + (d.getMonth() + 1+ '-' + d.getDate();

  const getInfo = await userda.get();

  const listnum = await userda.count(); 

  for (let i = 0; i < listnum.total; i++{ 

   var touser = getInfo.data[i].userid;

  // 发送模板消息

  try {

    const result = await cloud.openapi.subscribeMessage.send({

      touser: touser,

      page: 'pages/write/write',

      lang: 'zh_CN',

      data: {

        phrase1: {

          value: '日记提醒'

        },

        thing2: {

          value: '今天你的日记提交了吗?如果没有请提交'

        },

        time3: {

          value: dateshow

        },

        name4: {

          value: '系统提醒'

        }

      },

      templateId: template_id,

      miniprogramState: 'developer'

    })

   

  } catch (err{

    //return err

    

  }

  }

}


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

1 个回答

  • Mr.Zhao
    Mr.Zhao
    2021-05-11

    执行一次,发送了两次? 搞玄学吗

    2021-05-11
    有用
    回复 12
    • candywlx
      candywlx
      2021-05-11
      触发器是调用云函数一次啊,但比较奇怪是,如果我是提交6条日记,允许了6次,那么到了晚上触发器定的时间,就会收到6条消息。  但如果我现在提交6条日记 ,我用一个按钮调用函数,又只会收到一条消息,所以搞不明白 用触发器时 为什么 会收到那么 多消息?
      2021-05-11
      回复
    • Mr.Zhao
      Mr.Zhao
      2021-05-11回复candywlx
      这也能搞不明白?
      2021-05-11
      回复
    • candywlx
      candywlx
      2021-05-11回复Mr.Zhao
      不明白,为什么用触发器时就允许N次就发N次,不是也调用一次函数?   跟直接按钮去调用不一样吗?
      2021-05-11
      回复
    • Mr.Zhao
      Mr.Zhao
      2021-05-11回复candywlx
      是调用一次啊,里面不是有个for循环吗  这也不懂吗
      2021-05-11
      回复
    • candywlx
      candywlx
      2021-05-11回复Mr.Zhao
      for循环的表中只有两个用户,touser = getInfo.data[i].userid;这个是给不同的用户发消息,,,for循环不是循环日记 表,是循环用户表,,,而且我用按钮调用函数,发消息一个用户也只收到了 一条,,,所以我搞不懂
      2021-05-11
      回复
    查看更多(7)
登录 后发表内容