mirror of
https://github.com/FoggedLens/iD.git
synced 2026-02-13 17:23:02 +00:00
47 lines
1.3 KiB
JavaScript
47 lines
1.3 KiB
JavaScript
export function utilIdleWorker(tasks, processor, callback) {
|
|
var processed = [];
|
|
var currentPos = 0;
|
|
var totalTasks = tasks.length;
|
|
|
|
function worker(deadline) {
|
|
while (deadline.timeRemaining() > 0 && currentPos < totalTasks) {
|
|
var result = processor(tasks[currentPos]);
|
|
|
|
// if falsy dont add to the processed list
|
|
if (result) processed.push(result);
|
|
currentPos++;
|
|
}
|
|
|
|
// more tasks are left, we might need more idleCallbacks
|
|
if (currentPos < totalTasks) {
|
|
return window.requestIdleCallback(function(deadline) {worker(deadline);});
|
|
}
|
|
|
|
// tasks are completed
|
|
return callback(processed);
|
|
}
|
|
|
|
window.requestIdleCallback(function(deadline) {worker(deadline);});
|
|
}
|
|
|
|
// shim
|
|
window.requestIdleCallback =
|
|
window.requestIdleCallback ||
|
|
function(cb) {
|
|
var start = Date.now();
|
|
return setTimeout(function() {
|
|
cb({
|
|
didTimeout: false,
|
|
timeRemaining: function() {
|
|
return Math.max(0, 50 - (Date.now() - start));
|
|
}
|
|
});
|
|
}, 1);
|
|
};
|
|
|
|
window.cancelIdleCallback =
|
|
window.cancelIdleCallback ||
|
|
function(id) {
|
|
clearTimeout(id);
|
|
};
|