即使组件卸载,也能连续运行功能?

时间:2017-11-09 00:57:41

标签: reactjs heroku lifecycle

假设我在某个组件的生命周期方法中有一个函数,如此

componentDidMount() {
    this.taskRunner();
}

taskRunner() {
  setInterval((function(scope){
    return function(){
      scope.props.callApiandRecordtoDatabase();
    };
  })(this),360000);
}

如果当前没有人访问该网页,此进程是否会继续在托管网站上运行?我怎么能确保它呢?

2 个答案:

答案 0 :(得分:1)

是的,如果您没有明确清理计时器,它将继续运行。这就是为什么建议您清理componentWillUnmount()上的内容。正如React docs所说:

  

在卸载和销毁组件之前立即调用componentWillUnmount()。在此方法中执行任何必要的清理,例如使计时器无效,取消网络请求或清除在componentDidMount()中创建的任何订阅。

答案 1 :(得分:0)

  

如果当前没有人访问该页面,此过程是否会继续在托管网站上运行?

不,它不会。我认为你混淆了客户端和服务器的概念。 ReactJS将在客户端(即Google Chrome浏览器)上运行。如果该脚本被执行并且组件卸载,它仍将保留在内存中,并且该函数将在360,000 ms后执行,除非JavaScript进程停止,如果用户关闭执行该脚本的选项卡,则很可能会发生这种情况。您可以在此处使用我在WebpackBin上设置的示例:https://www.webpackbin.com/bins/-KyTgz4IOADwQYHiTvz9

你想要完成什么?为您的问题添加一些上下文并没有什么坏处,社区可能会建议您之前可能没有考虑过的更合适的解决方案。