我有以下代码
if (input.isValidLink()) {
store()
.then(db => db.update(message.from, text, json))
.then(value => value.selectAllFromDB())
.then(users => makeRequest(users));
}
Amd makeRequest函数
makeRequest(user) {
setInterval(() => {
users.forEach(user => {
httpRequest(user.json);
});
}, 10000);
}
我尝试做的是,selectAllFromDB function
从db返回用户数组,并将其作为参数传递给makeRequest function
,它通过每个用户循环,发送请求以接收{ {1}}数据并且每10秒执行一次,因此不会遗漏任何更改。每当任何用户发送链接时,它也应该开始观看此链接。问题是,在每个收到的链接上,它调用json
创建另一个间隔,如果收到两个链接,我有两个间隔。首先通过这个数组循环
makeRequest function
第二次通过这个
[{
id: 1234,
json: 'https://helloworld.com.json',
}]
有没有办法解决这个问题,所以只创建一个间隔?
答案 0 :(得分:1)
你需要做这样的事情,以确保你只创建一个间隔,并始终使用最新的用户列表:
let latestUsers;
let intervalId;
const makeRequest = (users) => {
latestUsers = users;
if (!intervalId) {
intervalId = setInterval(() => {
latestUsers.forEach(user => {
httpRequest(user.json);
});
}, 10000);
}
}
如果您不希望变量浮动,您可以使用自动调用函数来保持包装的良好状态:
const makeRequest = (() => {
let latestUsers;
let intervalId;
return (users) => {
latestUsers = users;
if (!intervalId) {
intervalId = setInterval(() => {
latestUsers.forEach(user => {
httpRequest(user.json);
});
}, 10000);
}
}
})();