收藏
回答

云环境中setTimeout调用为什么没有在指定时间执行?

在某个云函数,写了如下代码:

console.log("timer start")
setTimeout(function () {
  console.log("timer end")
  const tdb = cloud.database()
  tdb.collection('test').add({
    data: {
      time: db.serverDate()
    }
  }).then(res => {
    if (res.errMsg.indexOf('ok') == -1) {
      console.log(res)
      console.log("add test failed.")
      return null
    }
  })
}, 10000) 

期望10秒后执行添加记录到test数据库的操作,但是10秒后代码并没有执行。

等到20秒后某个来自小程序端的请求来了,此时添加test记录的那段代码就执行了。

这是什么原因呢?


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

2 个回答

  • 红萝卜炒鸡蛋
    红萝卜炒鸡蛋
    2019-12-12

    这应该用触发器吧,云函数不会自动执行,除非使用触发器或者从小程序端、其它云函数调用发起。

    2019-12-12
    赞同
    回复 1
    • monton
      monton
      2019-12-12
      用触发器担心消耗太大,每秒都要触发一次。
      2019-12-12
      回复
  • 老张
    老张
    2019-12-12

    10秒不到,云函数就运行到结尾了,一到结尾就会关闭进程的,不会等你的timeout.

    2019-12-12
    赞同
    回复 1
    • 121
      121
      2019-12-12
      还会这样的,怪不得我云函数有时候不写await,数据没写到数据库里面去,学习了
      2019-12-12
      回复
登录 后发表内容
问题标签