收藏
回答

云函数环境如何实现类似setTimeout的超时定时器?

例如,我想1分钟后执行一个操作,在小程序端可以使用setTimeout(fn,60000)调用实现,因为小程序端的运行环境一直都在。

可是在云函数环境,用户一个访问过来,接受用户访问的云函数实例运行最多20秒就结束了。没有了运行环境,在云函数中调用setTimeout(fn, 60000)就无法保证1分钟后执行函数fn

可以考虑使用定时触发器实现,建立一个每秒执行的定时器。接受用户访问的云函数中,可以写入数据库,设置60秒超时信息。定时器每秒把超时数字减一,超时信息等于0时意味着60秒定时到了。

但是上面的实现方案开销太大,每秒钟都要操作数据库。

有没有更好的办法?

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

3 个回答

  • withnate
    withnate
    2019-12-13

    定时触发器https://developers.weixin.qq.com/miniprogram/dev/wxcloud/guide/functions/triggers.html

    看看这个是否满足你的需求

    2019-12-13
    赞同
    回复 1
    • monton
      monton
      2019-12-13
      文中已经提到定时触发器方案,不过这个方案开销大。
      2019-12-13
      回复
  • 老张
    老张
    2019-12-13

    写成两个云函数吧,第一个执行完后返回到小程序端,60秒后执行第二个云函数,即执行timeout中的fn.

    wx.cloud.callFunction('fn1').then({

            setTimeout(function(){wx.cloud.callFunction('fn2')},60000)

        }

    )

    2019-12-13
    赞同
    回复 4
    • monton
      monton
      2019-12-13
      60秒后,如何调用第二个云函数。就缺少这个定时器。
      2019-12-13
      回复
    • 老张
      老张
      2019-12-13回复monton
      目测你应该是没看明白。在小程序端你想怎么timeout就怎么timeout。
      2019-12-13
      回复
    • monton
      monton
      2019-12-13回复老张
      说的很清楚是云函数环境,不是小程序端。
      2019-12-13
      回复
    • 老张
      老张
      2019-12-13回复monton
      那就没办法了。
      2019-12-13
      回复
  • o0o有脾气的酸奶
    o0o有脾气的酸奶
    2019-12-13

    貌似无法实现

    2019-12-13
    赞同
    回复
登录 后发表内容
问题标签