From ec138f94ce2d60ac3dca92a7e78d720e021abb1d Mon Sep 17 00:00:00 2001 From: Nolan Lawson Date: Sat, 21 Apr 2018 00:33:36 -0700 Subject: [PATCH] fix requestIdleCallback in edge/safari (#198) Fixes #195 --- routes/_utils/scheduleIdleTask.js | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/routes/_utils/scheduleIdleTask.js b/routes/_utils/scheduleIdleTask.js index e5f6a947..dab78952 100644 --- a/routes/_utils/scheduleIdleTask.js +++ b/routes/_utils/scheduleIdleTask.js @@ -8,15 +8,22 @@ import { mark, stop } from './marks' const taskQueue = new Queue() let runningRequestIdleCallback = false +const liteRIC = cb => setTimeout(() => cb({timeRemaining: () => Infinity})) // eslint-disable-line + function getRIC () { // we load polyfills asynchronously, so there's a tiny chance this is not defined - return typeof requestIdleCallback !== 'undefined' ? requestIdleCallback : setTimeout + return typeof requestIdleCallback !== 'undefined' ? requestIdleCallback : liteRIC } function runTasks (deadline) { mark('scheduleIdleTask:runTasks()') while (taskQueue.length && deadline.timeRemaining() > 0) { - taskQueue.shift()() + let task = taskQueue.shift() + try { + task() + } catch (e) { + console.error(e) + } } if (taskQueue.length) { let rIC = getRIC()