My code was working until i updated node.js to version 8.11.3
Now i always get error \"callback argument must be a function\" when trying to call a function with setTim
Callback argument for setTimeout
must be a function. Write it like this. Not tested but it should work.
function testFunction(itemid, price) {
var url = 'https://example.com';
var options = {
method: 'get',
url: url
}
request(options, function (err, res, body) {
var response = JSON.parse(body);
if(response.status == 'fail'){
setTimeout(function () {
testFunction(itemid, price);
}, 100);
}
})
}
Q: I am getting the error "callback argument must be a function" when trying to call a function with setTimeout. Why?
A: setTimeout(testFunction(itemid, price), 100);
You have accidentally pushed the output of testFunction
as the first argument of setTimeout
which it is suppose to be a function
and hence the error.
What you could do is, pass in a function and call the testFunction
recursively from there.
Example:
function test(itemid, price) {
console.log("hello => " + itemid + ", " + price);
if (price < 50) {
setTimeout(() => { test(itemid, price + 10) }, 100);
}
}
test(100, 10)
Yes, setTimeout() expects first argument as callback function. we can make use of es6 fat arrow function here you can try this!
setTimeout(() => testFunction(itemid, price), 100);
Hope this helps!
@keyur is correct. According to the node.js timers documentation the setTimeout function takes the name of the function to execute as the first argument, the delay in milliseconds as the second argument, followed by any arguments being passed to the function.
For Example:
setTimeout(testFunction, 100, itemid, price);