收藏
回答

云函数延迟执行(异步调用),除了addDelayedFunctionTask,还有什么解决方案吗?

框架类型 问题类型 终端类型 AppID 环境ID 基础库版本
小程序 Bug 微信iOS客户端 x y z

云函数逻辑可以分为先执行A,再执行B。

我要达到的效果是在执行A之后立即返回结果给小程序端,减少用户等待时间,然后在后台默默执行B


自问自答:在Mr.Zhao大佬的指点下,经过一番调试,结论是云函数A中调用云函数B时,直接去掉await就是异步延迟执行,完全符合需求。

但是注意一下,nodejs8.9环境下这样运行不成功,nodejs10.15下可以。

另外可能因为平台对云函数计费的考虑,即使异步调用,云开发控制台日志显示的云函数A的运行时间显示的与同步执行时间相当,包含了云函数B的执行时间。但实际运行确实是异步调用,从小程序端监控云函数A的响应时间可以判别。所以即使采用异步调用,如果云函数B3秒超时,A也会3秒超时,设置云函数的超时时间要注意一下这个问题。




官方文档对nodejs8异步问题也有特别说明,后来才看到的,贴上来分享给大家:

https://docs.cloudbase.net/cloud-function/deep-principle




目前使用addDelayedFunctionTask有几个问题:

1、必须最快在6秒之后执行,而我希望实现能立即执行,0秒。

2、目前还不支持自识别环境 DYNAMIC_CURRENT_ENV,这样容易造成发布事故。

3、该调用过程需要0.5秒左右耗时。

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

2 个回答

  • Mr.Zhao
    Mr.Zhao
    06-27

    06-27
    有用 1
    回复 12
    • 郑旭东
      郑旭东
      06-27
      没看懂,你这里哪个任务是不需要等待静默执行的?云函数testB没有加await根本就不会被执行,查询todos的语句可以执行但是需要用户等待。
      06-27
      回复
    • Mr.Zhao
      Mr.Zhao
      06-27回复郑旭东
      testB是后执行的   不可能看不懂啊,这是js的东西。没加await是不用等待它返回结果,不是不会执行
      06-27
      回复
    • 郑旭东
      郑旭东
      06-27回复Mr.Zhao
      testB不会执行的,你实际跑跑看。
      06-27
      回复
    • Mr.Zhao
      Mr.Zhao
      06-27回复郑旭东
      你太逗了
      06-27
      回复
    • 郑旭东
      郑旭东
      06-27回复Mr.Zhao
      大佬明示,我真不懂怎么把testB跑起来,这样能跑起来留个帐号,我转你大红包
      06-27
      回复
    查看更多(7)
  • 老张
    老张
    发表于小程序端
    06-27

    云函数代码中途想返回结果,不可行。我的话,会返回小程序端,判断后再执行B

    06-27
    有用
    回复
登录 后发表内容