参数必须是一个函数

时间:2019-10-21 12:17:03

标签: javascript node.js

我想做一个循环,每隔一段时间下载一次文件。但是当请求函数需要参数时,我无法使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 

3 个答案:

答案 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)