我想做一个循环,每隔一段时间下载一次文件。但是当请求函数需要参数时,我无法使setTimeout函数正常工作。这是我失败的最后一招。我在做什么错了?
const http = require('http');
const fs = require('fs');
const file = fs.createWriteStream("file.jpg");
const fileToDownload = "http://i3.ytimg.com/vi/J---aiyznGQ/mqdefault.jpg";
function request1() {
http.get(fileToDownload, function(response) {
response.pipe(file)
});
}
function request2(saveName) {
const save = fs.createWriteStream(saveName);
http.get(fileToDownload, function(response) {
response.pipe(save)
});
}
setTimeout(request1, 3000);
setTimeout(request2("file2.jpg"), 3000); // TypeError: "callback" argument must be a function
答案 0 :(得分:3)
您没有传递函数,而是传递结果。 请改用以下内容:
setTimeout(() => request2("file2.jpg"), 3000);
答案 1 :(得分:2)
您没有传递函数到setTimeout
,而是传递了一个函数调用,该调用将把参数作为函数的返回类型,而不是函数本身。
相反,您只能传递--
setTimeout(() => request2("file2.jpg"), 3000);
答案 2 :(得分:2)
代替直接调用函数,请尝试以下操作:
setTimeout(function(){
request2("file2.jpg")
}, 3000);
或使用箭头功能
setTimeout(() => request2("file2.jpg"), 3000)