Javascript setInterval给我类型错误:无法调用方法';应用';未定义的
在下面的脚本中,我计划让脚本轮询设备(家庭自动化)的状态。我想每5秒钟做一次。当我在没有循环(setInterval)的情况下运行脚本时,运行良好。有了这个循环,它第一次就可以正常运行了。第二次出现错误。我正在用node.js运行脚本 首先是脚本:Javascript setInterval给我类型错误:无法调用方法';应用';未定义的,javascript,node.js,function,undefined,setinterval,Javascript,Node.js,Function,Undefined,Setinterval,在下面的脚本中,我计划让脚本轮询设备(家庭自动化)的状态。我想每5秒钟做一次。当我在没有循环(setInterval)的情况下运行脚本时,运行良好。有了这个循环,它第一次就可以正常运行了。第二次出现错误。我正在用node.js运行脚本 首先是脚本: //import node module request var request = require('request'); //function to get status of a device function wrapper (url, d
//import node module request
var request = require('request');
//function to get status of a device
function wrapper (url, device, filter, service) {
request(url, function (error, response, body) {
if (!error && response.statusCode == 200) {
obj = JSON.parse(body);
for (var i = 0; i < obj[device].states.length; i++) {
if (obj[device].states[i].service === service && obj[device].states[i].variable === filter) {
deviceStatus = obj[device].states[i].value;
console.log("deviceStatus inside function: " + deviceStatus);
//call the compareTime function
compareTime(deviceStatus);
}
}
}
return 3;
});
};
function compareTime() {
var hour = new Date().getHours();
console.log(hour);
if ( 8 <= hour && hour <= 21 ) {
//var deviceStatus = 0;
console.log("deviceStatus :" + deviceStatus);
if (deviceStatus === '1') {
request('url', function (error, response, body) {
if (!error && response.statusCode == 200) {
}
})
request('url', function (error, response, body) {
if (!error && response.statusCode == 200) {
}
})
} else {
console.log("deviceStatus :" + deviceStatus);
}
} else {
console.log("deviceStatus :" + deviceStatus);
}
};
loop = wrapper('url', 'Device_Num_21', 'Status', 'urn:upnp-org:serviceId:SwitchPower1');
//call the function wrapper with arguments
setInterval(loop, 5000);
有人能在这一点上帮助我吗?希望它的第一个参数是一个函数,它的循环可以定义为:
function loop() {
wrapper('url', 'Device_Num_21', 'Status', 'urn:upnp-org:serviceId:SwitchPower1');
}
setInterval(loop, 5000);
该错误是因为循环
当前持有,不能将其视为属性为setInterval()
所期望的函数或对象
该值是从当前正在立即调用的wrapper()
返回的。如果要使用参数调用函数,可以这样做:
setInterval(()=>this.yourFunciton(yourParemeter),100)
这真是太棒了。它确实很有魅力。谢谢你的简短而清晰的解释。我真的很抱歉,我还不能投票支持你的贡献。谢谢
function loop() {
wrapper('url', 'Device_Num_21', 'Status', 'urn:upnp-org:serviceId:SwitchPower1');
}
setInterval(loop, 5000);