node js 设置间隔方法调用

node js Set Interval Method Calling

我对 setInterval 函数有疑问。我正在尝试读取 JSON 文件并向 JSON 中的所有电子邮件 ID 发送电子邮件,但问题是最后一个电子邮件 ID 传递给 sendtheMail() 函数。因此电子邮件只发送到最后一个电子邮件 ID。下面你可以看到我的代码,请谁能帮我解决这个问题

async function mailSend(callback) {

    for (let scriptData of automatedScriptData.dataList) {
        var userData = {
            email: scriptData["Business Email"],
            password: "acc0unt@123",
            name: scriptData["First Name"] + " " + scriptData["Last Name"],
            firstName:scriptData["First Name"],
            title: scriptData["Title"],
            timeZone: scriptData["Time Zone"],
            location: scriptData["Country"],
            company: scriptData["Company"]
        };

       setInterval(function() {
         console.log(userData.email);
           sendtheMail(userData);
           }, 5*1000); 

    }

}

Javascript 是单线程的,它有一个事件循环

您的 function 有一个循环,并且在每次迭代时,都会将一个事件添加到事件循环中。但是,由于 var 变量是 function-scoped,因此在循环的每次迭代中都会覆盖该变量,然后调用您在 timeout 中定义的 function,但到那时您的变量已取其值。将 var userData 更改为 let userData,因为 let is block-scoped 正是您需要的。示例来证明我的观点:

for (var i = 0; i < 2; i++) {
    let foo = i;
    setTimeout(function() {console.log("foo is " + foo)}, 100);
}