我的代码一直有效,直到我将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);
}
})
}
答案 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);
希望这会有所帮助!