我会尽力清楚地解释我的问题。 所以我制作了一堆显示值的javascript函数并保持这些值是最新的我需要一个间隔来刷新函数。
这些是我的间隔中的功能
var interval = null; //make global variable for interval
function refresh(){ // create a function that contains all the functions that need to be refreshed so I can pass this function to my setInterval
g1.refresh(linearScaling(0, 32761 , 0 , 10, readData('IW0')));
showAnalogText('textonly', 'IW0');
g2.refresh(linearScaling(0, 32761 , 0 , 10, readData('IW1')));
showAnalogText('textonly2', 'IW1');
showDigInputImg('light1', 'IX2.0', '/imgs/lightON.png', '/imgs/lightOFF.png');
showDigInputImg('light2', 'IX2.1', '/imgs/lightON.png', '/imgs/lightOFF.png');
showDigInputBool('led1', 'IX2.0', 'radio');
showDigInputBool('led2', 'IX2.1', 'radio');
showDigInputBool('boolean1', 'IX2.0', 'bool');
showDigInputBool('boolean2', 'IX2.1', 'bool');
showDigInputBool('text1', 'IX2.0', 'text');
showDigInputBool('text2', 'IX2.1', 'text');
showDigInputImg('output1', 'QX2.0', '/imgs/lightON.png', '/imgs/lightOFF.png');
showDigInputImg('output2', 'QX2.1', '/imgs/lightON.png', '/imgs/lightOFF.png');
}, 1000)
所以这些函数需要不断更新,它们用ajax执行读取请求,但我也有写函数和我想要完成的,就是每当我执行写函数时停止间隔,所以ajax请求停止并且我可以执行写入请求,写入完成后会重新启动间隔。
这些是我的开始和停止功能:
function startRefresh(){ //needs to be declared in my library but the function refresh() doesn't exist in library
if (!interval){
interval = setInterval(refresh, 1000);
}
}
function stopRefresh(){
clearInterval(interval);
interval = null;
}
我知道这有效,但问题是我正在构建一个库,所以用户可以重复使用我的函数供自己使用,所以startrefresh和stoprefresh函数将在库中,但startrefresh函数需要refresh() (包含所有其他函数)但刷新只能在HTML页面本身的javascript中声明(而不是在库中),因为函数刷新包含在运行时创建的对象,如g1和g2,所以我可以'在我的库中声明refresh()因为它包含尚不存在的对象。
任何人都可以帮助我找到一个简单的解决方案,U可能会改变你想要的任何东西,我只想要一种最有效的方式,用户可以在一个间隔内放置他需要刷新的所有功能,并在执行时停止并启动间隔一个写,但stop和startrefresh函数需要在库中,用户不应该看到start和stopfunction,它们在我的write函数中被调用。 希望有人能理解这一点并帮助我,我将非常感激,如果你需要更多的解释我很乐意把它给你
可能将所有函数放在某种变量中并将该变量传递给我的startrefresh函数,这会起作用吗?
和平,Stijn答案 0 :(得分:1)
为什么不使用函数作为startRefresh
function startRefresh(refresh) {
if (!interval){
interval = setInterval(refresh, 1000);
}
}
因此您可以使用匿名函数
运行该函数startRefresh(function() {
//do stuff to be refreshed
});
或者在您的情况下,您也可以在匿名函数中存储刷新功能
startRefresh(function(){
g1.refresh(linearScaling(0, 32761 , 0 , 10, readData('IW0')));
showAnalogText('textonly', 'IW0');
g2.refresh(linearScaling(0, 32761 , 0 , 10, readData('IW1')));
showAnalogText('textonly2', 'IW1');
showDigInputImg('light1', 'IX2.0', '/imgs/lightON.png', '/imgs/lightOFF.png');
showDigInputImg('light2', 'IX2.1', '/imgs/lightON.png', '/imgs/lightOFF.png');
showDigInputBool('led1', 'IX2.0', 'radio');
showDigInputBool('led2', 'IX2.1', 'radio');
showDigInputBool('boolean1', 'IX2.0', 'bool');
showDigInputBool('boolean2', 'IX2.1', 'bool');
showDigInputBool('text1', 'IX2.0', 'text');
showDigInputBool('text2', 'IX2.1', 'text');
showDigInputImg('output1', 'QX2.0', '/imgs/lightON.png', '/imgs/lightOFF.png');
showDigInputImg('output2', 'QX2.1', '/imgs/lightON.png', '/imgs/lightOFF.png');
}, 1000)
});
<强>更新强>
function makeStartRefresher(refresh) {
return function() {
if (!interval){
interval = setInterval(refresh, 1000);
}
}
}
您可以使用此功能:
var startRefresh = makeStartRefresher(function() {
g1.refresh(linearScaling(0, 32761 , 0 , 10, readData('IW0')));
showAnalogText('textonly', 'IW0');
g2.refresh(linearScaling(0, 32761 , 0 , 10, readData('IW1')));
showAnalogText('textonly2', 'IW1');
showDigInputImg('light1', 'IX2.0', '/imgs/lightON.png', '/imgs/lightOFF.png');
showDigInputImg('light2', 'IX2.1', '/imgs/lightON.png', '/imgs/lightOFF.png');
showDigInputBool('led1', 'IX2.0', 'radio');
showDigInputBool('led2', 'IX2.1', 'radio');
showDigInputBool('boolean1', 'IX2.0', 'bool');
showDigInputBool('boolean2', 'IX2.1', 'bool');
showDigInputBool('text1', 'IX2.0', 'text');
showDigInputBool('text2', 'IX2.1', 'text');
showDigInputImg('output1', 'QX2.0', '/imgs/lightON.png', '/imgs/lightOFF.png');
showDigInputImg('output2', 'QX2.1', '/imgs/lightON.png', '/imgs/lightOFF.png');
}, 1000)
});