2017-03-05 110 views
0

請耐心等待,因爲我是JS編程的新手。來自外部js的調用函數內部方法

我有以下問題:

我的一個模塊包含一個的setInterval循環。 單擊HTML按鈕(ON時,代碼中的變量狀態),此模塊由我的server.js調用。我想從server.js中斷它的執行(OFF),但它不起作用。

我知道它感覺像一個重複的問題,但我已經搜索了很多Stack Overflow中的信息,並且所有問題都參考了從正在執行的代碼和從同一個文件中停止的代碼。在我的情況下,我打電話在外部文件(其中包含setInterval)的方法,我想觸發clearInterval應該在該外部文件中運行!

下面

簡化代碼:

action.js

module.a = function(milisec) { 
    var myVar = setInterval(function() { do stuff }, milisec); 
} 
module.exports = methods; 

我第一次嘗試:

Server.js

// var state is a button on my HTML 
var actions = require('./actions'); 
If (state == 1) 
{ actions.a(milisec) } 
If (state == 0) 
{ clearInterval(myVar) } 

但它沒有工作。我認爲這也是明確的原因:代碼不知道從哪裏獲得myVar,基本上我認爲我應該從模塊內部調用一個函數來停止setInterval,因此,我在該方法中包含函數stop()

我的第二次嘗試:

action.js

methods.a = fuction(milisec) { 
    var myVar = setInterval(function() { 
    console.log("I'm being executed");}, milisec); 
    function stop() { 
     clearInterval(myVar); 
    } 
} 
Module.exports = methods; 

但我不知道如何來指代功能我methods.a內的server.js文件

我已經嘗試過:

actions.a.stop() 

但它根本不起作用。 它甚至有可能嗎?有沒有辦法在我的server.js中執行clearInterval

感謝您的幫助

+0

請向我們解釋您的代碼在哪裏運行以及文件爲何分離。這兩個文件都嵌入在同一個HTML文檔中,還是在NodeJS服務器上遠程運行的'server.js'? – Martin

+0

都嵌入在相同的HTML!我正在研究一個beaglebone,並利用socket.io創建一個服務器來執行代碼.. –

回答

0

你methods.a內聲明myVar的(),使得它的範圍局部的功能。嘗試在函數之外聲明myVar。

+0

好吧......好像是全部關於全局/局部變量...... :)謝謝拉里,工作。在actions.js中聲明瞭myvar,併爲函數stop創建了一個方法,如果在server.js中將其稱爲state == 0 –