首页 > 解决方案 > Firebase 函数 setInterval 和 clearInterval 分别调用

问题描述

我有两个 API,第一个是 start setInterval,第二个是 clearInterval。当然第二个 API 不起作用,但是如何使它起作用呢?据我了解,没有可以分配 setInterval 的全局变量。有任何想法吗?

let glob = 0;
let timer = null;

exports.start = functions.https.onRequest((req, res) => {
    if(timer){
    }else {
      queueFunction();
    }
    res.status(status).send(mes);
  });
});

exports.stop= functions.https.onRequest((req, res) => {
    if(timer){
      clearInterval(timer);
    }else {
    }
    res.status(status).send(mes);
  });
});

function queueFunction() {
 timer = setInterval(timerFunc, 3000);
}

function timerFunc(){
  glob++;
}

标签: javascriptnode.jsfirebasegoogle-cloud-functionssetinterval

解决方案


你试图做的事情是不可能的。每个函数都在一个完全隔离的服务器实例中运行。他们对彼此一无所知,也没有共享状态。

此外,在 HTTP 函数发送响应后,它会被有效地终止和清理。函数终止后,您无法在该服务器实例中继续进行正在进行的工作。

如果您需要在函数中保留某些状态,则应使用实时数据库或 Firestore 等存储机制。如果您需要在函数终止后继续工作,则必须启动另一个函数,通常通过 pub/sub。或者,您可以委托给另一个服务器实例,例如 App Engine。


推荐阅读