收藏
回答

云函数中的异步函数不能长时间挂在后台执行嘛?

问题模块 框架类型 问题类型 终端类型 AppID 基础库版本
云开发 小程序 需求 客户端 wx6419c52796a1db50 2.6.1

想要写一个云函数,可以定时发送模板消息

目前的思路是把发送云函数的代码放在setTimeout()里面定时执行

但是这个函数是异步的

当使用Promise包装异步函数后,如果延迟时间只有几秒钟,那么可以收到模板通知(在手机上测试的)。但是如果时间稍长,比如60s,就无法成功。而且用Promise包装的话,不合理,不可能让小程序一直等待云端的函数全部执行完吧。

如果不使用Promise包装的话,貌似任何异步函数都不会执行,无论是setTimeout(),还是request()


所以这个问题目前有没有解决方案呢?


这个功能,在bmob云上面是可以实现的(不需要使用Promise包装),但是bmob云的云函数只能免费使用40天T-T



最后一次编辑于  02-22  (未经腾讯允许,不得转载)
邀请回答
复制链接收藏投诉关注问题回答

1 个回答

  • 邱一欢
    邱一欢
    02-22

    自己做一个 异步函数调用的管理队列,再加一个定时器定时检测队列。

    02-22
    赞同
    回复 7
    • しん じゃくかん
      しん じゃくかん
      02-22

      请问管理队列和检测队列怎么做呢?

      02-22
      回复
    • 邱一欢
      邱一欢
      02-22

      https://developers.weixin.qq.com/s/gU884nm37t6v  这个用例有 批量下载图片(

      JSDownloadControl() 这个类)

      , 里面有管理管理队列的方法, 你只需要定时把队列启动下就可以了

      02-22
      回复
    • しん じゃくかん
      しん じゃくかん
      02-22回复邱一欢

      谢谢,我学习一下!

      02-22
      回复
    • しん じゃくかん
      しん じゃくかん
      02-22回复邱一欢

      但是这个例子是在小程序里执行的。

      我想做的是,比如我希望10个小时候后收到模板消息,我不可能小程序一直开着的。

      我用bmob云是实现了这个方法的,就是在小程序上调用云函数,然后小程序就可以退出了,而云函数里的setTimeout函数是在服务器里面执行的,到时间就会发送POST请求,向微信发送模板消息。

      但是我在微信的云函数里却没办法实现。

      02-22
      回复
    • 邱一欢
      邱一欢
      02-22

      哦, 你是要后台执行这个定时器, 然后推送模板消息。 微信云函数我没用过, 我们一般是后台nodejs/ .net / java /写个api后台服务,定时推送。 如果不做api , 你可以每个任务上传云盘一个json文件里面定义好 {time:调用时间, funcname:调用函数}, 后台写个小服务, 扫文件,有新的文件就执行一个读里json里面的数据,根据json数据推送服务什么的。

      02-22
      回复
    查看更多(2)