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

MHH*_*MHH 2 javascript callback settimeout node.js

我的代码一直在工作,直到我将 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);
     }
  })

}
Run Code Online (Sandbox Code Playgroud)

Key*_*iya 11

的回调参数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);
        }
    })
}
Run Code Online (Sandbox Code Playgroud)


小智 9

@keyur 是正确的。根据node.js 计时器文档,setTimeout 函数将要执行的函数的名称作为第一个参数,以毫秒为单位的延迟作为第二个参数,然后是传递给函数的任何参数。

例如:

setTimeout(testFunction, 100, itemid, price);
Run Code Online (Sandbox Code Playgroud)