Click here to Skip to main content
15,884,986 members
Please Sign up or sign in to vote.
1.00/5 (1 vote)
See more:
When I create a function and gave inside setInterval an error occured as TypeError: Cannot read Property 'apply' of undefined

at wrapper [as _onTimeout] (timers.js:274:13)

at Timer.listOnTimeout (timers.js:119:15)

My code pages are given below
Page 1 (Server.js)
var db = require('./dbConnect.js');
var ins = require('./dbInsert.js');

var tagId = [];
var schoolInfoId = [];
var imeNo = [];
var totalRows = 0;

function ViewQuery() {
    var mysql = db.mysql;
    var connection = db.createMyConnection();


    connection.connect();


    var mycommand = "SELECT     t.skha_tag_id_no,s.skha_school_info_id,a.skha_out_device_imeno" +
        " FROM skha_tag t INNER JOIN skha_student_info s on skha_tag_id     = skha_student_tag_id_no " +
         " INNER JOIN skha_student_school_attendance a on     a.skha_student_info_id = s.skha_student_info_id" +
         " WHERE DATE(skha_student_in_time) = CURDATE() AND     skha_student_out_time IS NULL and skha_out_status = 1 ";

     connection.query(mycommand, function (err, rows) {
        if (!err) {

         var result;
            for (i = 0; i < rows.length; i++) {
                totalRows++;

                result = rows[i];

                tagId.push(result['skha_tag_id_no']);
                schoolInfoId.push(result['skha_school_info_id']);
                imeNo.push(result['skha_out_device_imeno']);

            }


            for (i = 0; i < totalRows; i++) {
                ins.insertDB(tagId[i], schoolInfoId[i], imeNo[i]);
            }

        }
        else
            console.log('Error while performing Query.');
    });

    connection.end();

};

setInterval(ViewQuery(),30000); //Error Generating from here


Page 2 (dbConnect.js)
var mysql = require('mysql');

exports.createMyConnection = function createMyConnection() {
    var connection = mysql.createConnection( {
        host    : 'your_IP_address',
        user    : 'your_user',
        password : 'your_password',
        database : 'your_db',
        multipleStatements: true
    });
    return connection;
}

exports.mysql = mysql;


Page 3 (dbInsert.js)
var db = require('./dbConnect.js');

var logOutTimeInterval = 5;
exports.insertDB = function (RFID, schoolID, imei) {

    var mysql = db.mysql;
    var connection = db.createMyConnection();

    connection.connect();
    console.log('IMEI : ' + imei);
    console.log(RFID);



    str = "SET @OutStatus=0;SET @logOutTime=0;call     out_mark_save_two_device('" + RFID + "'," + schoolID + "," +      logOutTimeInterval + ",@OutStatus,@logOutTime," + imei + ")";

    console.log(str);


    connection.query(str, function (err, rows, fields) {//, fields
        if (err)
            console.log('Error while performing Query.' + err);
         else {
            console.log(rows[0]);

        }
    });

    connection.end();


};

This code executes only once, and then displaying the above error.

I have posted this issue in stack overflow also. For that see the following link.
http://stackoverflow.com/questions/31605654/node-js-setinterval-typeerror-cannot-read-property-apply-of-undefined[^]
Posted
Updated 28-Jul-15 0:20am
v3
Comments
Sergey Alexandrovich Kryukov 28-Jul-15 9:44am    
Where is that ".apply"? What's unclear in this message?
—SA
Richard Deeming 28-Jul-15 10:05am    
Your code is vulnerable to SQL Injection[^].

NEVER use string concatenation to build a SQL query. ALWAYS use a parameterized query.
Nowfal Sharafudeen 29-Jul-15 1:14am    
Hi Richard Deeming, thanks for your information. I know about that sql injection problem. But, now I have just put this code for testing purpose. When I implement it. I'll definitely take care your comment.
But any way I have not reached any solution.
Thanks Sergey Alexandrovich Kryukov.
Can we use setTimeout function instead of setInterval function.


//setInterval(ViewQuery(), 10000);
setTimeout(ViewQuery(), 10000);


Is there any difference between them? or Is there any use?

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900