setTimeout-回调参数必须是一个函数

时间:2018-08-04 12:03:42

标签: javascript node.js callback settimeout

我的代码一直有效,直到我将node.js更新到版本8.11.3

现在,在尝试使用setTimeout调用函数时,总是出现错误“回调参数必须是函数”。

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(testFunction(itemid, price), 100);
     }
  })

}

4 个答案:

答案 0 :(得分:2)

setTimeout的回调参数必须是一个函数。这样写。未经测试,但应该可以。

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

答案 1 :(得分:1)

@keyur是正确的。根据{{​​3}},setTimeout函数将要执行的函数的名称作为第一个参数,将以毫秒为单位的延迟作为第二个参数,然后将任何参数传递给该函数。

例如:

setTimeout(testFunction, 100, itemid, price);

答案 2 :(得分:0)

Q:当尝试使用setTimeout调用函数时,出现错误“回调参数必须是函数”。为什么?

A: setTimeout(testFunction(itemid, price), 100);您不小心将testFunction的输出作为setTimeout的第一个自变量,假设它是一个{{1} },从而导致错误。

您可以做的是,传入一个函数,然后从那里递归调用function

示例:

testFunction

答案 3 :(得分:0)

是的,setTimeout()需要第一个参数作为回调函数。 我们可以在这里使用es6胖箭头功能 你可以试试看!

setTimeout(() => testFunction(itemid, price), 100);

希望这会有所帮助!