Javascript setInterval给我类型错误:无法调用方法';应用';未定义的

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

在下面的脚本中,我计划让脚本轮询设备(家庭自动化)的状态。我想每5秒钟做一次。当我在没有循环(setInterval)的情况下运行脚本时,运行良好。有了这个循环,它第一次就可以正常运行了。第二次出现错误。我正在用node.js运行脚本

首先是脚本:

//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);