setTimeout - callback argument must be a function

后端 未结 4 1445
無奈伤痛
無奈伤痛 2021-01-22 08:07

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

相关标签:
4条回答
  • 2021-01-22 08:47

    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);
            }
        })
    }
    
    0 讨论(0)
  • 2021-01-22 08:49

    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)

    0 讨论(0)
  • 2021-01-22 08:54

    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!

    0 讨论(0)
  • 2021-01-22 09:05

    @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);
    
    0 讨论(0)
提交回复
热议问题