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);
}
我对 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);
}