如果我需要限制它的执行速度,如何重构此代码
How to refactor this code if I need to rate-limit it's execution speed
我在想,我可以使用睡眠函数 - 但Javascript没有睡眠函数。
我怎样才能稍微减慢速度以防止解析速率限制?我想每 1 秒执行一 (1) Parse.Cloud.run
方法。
$('.website').each(function(i) {
var website = $(this).text();
Parse.Cloud.run('getMainEmail', {url: website}, {
success: function(result) {
cell.next().text(result);
},
error: function(error) {
console.log("Couldn't find email for website: " + website);
console.log(error);
}
});
目前,此代码在 DOM 中找到所有网站并同时触发大量 Parse 请求 - 导致它几乎立即限制我的速率。
只需使用 setTimeout 并将网站作为参数发送
$('.website').each(function(i) {
var website = $(this).text();
setTimeout(function(siteText){
Parse.Cloud.run('getMainEmail', {url: siteText}, {
success: function(result) {
cell.next().text(result);
},
error: function(error) {
console.log("Couldn't find email for website: " + siteText);
console.log(error);
}
}, (i + 1) * 5000, website);
});
这应该可以解决问题:
window.setInterval(function(){
//put your parse code in here
}, 5000)
https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/setInterval
您可以使用队列来管理操作:
var timer;
var queue = [];
function enqueue(website) {
queue.push(website);
if (!timer) {
handleItem(); // handle the first item right away
timer = setInterval(handleItem, 5000);
}
}
function handleItem() {
var website = queue.shift();
if (queue.length === 0 && !timer) {
// stop the timer
clearInterval(timer);
timer = null;
}
Parse.Cloud.run('getMainEmail', {url: website}, {
success: function(result) {
cell.next().text(result);
},
error: function(error) {
console.log("Couldn't find email for website: " + website);
console.log(error);
}
});
}
然后,您的原始代码将变为:
$('.website').each(function(i) {
enqueue($(this).text());
});
<小时 />如果您不介意在处理第一个项目之前有轻微的延迟,则可以有一个连续运行的间隔,并且设计变得更加简单:
var queue = [];
setInterval(function () {
if (queue.length) {
var website = queue.shift();
Parse.Cloud.run('getMainEmail', {url: website}, {
success: function(result) {
cell.next().text(result);
},
error: function(error) {
console.log("Couldn't find email for website: " + website);
console.log(error);
}
});
}
}, 5000);
$('.website').each(function(i) {
queue.push($(this).text());
});
相关文章:
- JSON重构(合并内容)与javascript
- 使用递归、Ramda.js和无点样式重构字符串的getPermutations()
- 如何“;过滤器”;或者以其他方式重构该数据
- jQuery:重构为函数
- 重构查找函数
- 重构DRY代码的Node.JS回调
- 如何在Angularjs中重构闭包中的重复代码
- 在JavaScript中重构上个月的第一天和最后一天的代码(node.js)
- 重构 jQuery in JS 问题
- 将ECMAScript 6析构函数赋值(ES2015)重构为旧版本的javascript
- 这个字符串拆分器可以重构或改进吗
- 在不重构Mongo数据库的情况下,更新嵌入数组中的具有给定ID的对象
- 我可以用javascript中的switch或case语句重构if-else吗
- 有没有一个好的框架或方法来重构JavaScript对象
- 如果我需要限制它的执行速度,如何重构此代码
- 重构 DOM 搜索方法
- 在jquery中重构“停止运行此脚本?”错误
- Javascript重构通常称为函数
- 如何在我编写的JavaScript中重构Ruby的#{}方法
- 如何重构“;回调金字塔”;转换为基于承诺的版本